可以在MVC和WebAPI中完成。但有没有办法在ASP.Net Web窗体中更改默认序列化程序?我们正在使用Newtonsoft.JSON
通过网络发送对象。它使用CamelCasePropertyName
,因此C#中的FirstName
在JSON中变为firstName
。现在,当我们需要将对象传递回服务器以供web methods
使用时,我们必须使用FirstName
属性而不是firstName
创建新对象,否则ASP.Net会抱怨并请求失败。
我真诚地希望我有一些非常容易和直截了当的事情。
编辑: - 通过为类型实现自定义转换或使用Web服务或wcf或转移到MVC / WebAPI,一切都很好,以克服这些问题。我们想要实现的是使用页面方法和经典(如果说得对)ASP.Net网络表单。
我正在寻找一些方法来插入JSON.Net
序列化程序( Newtonsoft 一个)来代替默认JavaScriptSerializer
,就像我们在MVC/WebAPI
堆栈中所做的那样。
示例代码:
//class
public class Student
{
public string FirstName{get;set;}
}
//WebMethod in ASPX code-behind
[WebMethod]
public static string UpdateStudent(Student s)
{
//code to update object and send some response back.
}
主要问题
以浏览器的json格式从浏览器获取数据时,默认JavaScriptSerialization
无法处理属性名称。
但是,如果我发送自定义对象,如:
var o={FirstName:'John'};
它有效!!!
答案 0 :(得分:0)
C#和Javascript都是区分大小写的语言。所以FirstName和firstName的处理方式不同。
如果您不想使用Newtonsoft.JSON,则可以使用DataContractJsonSerialize
将JSON数据序列化和反序列化为C#类型。为此,您应该具有匹配的C#类型。
请查看以下有助于您的MSDN链接。
答案 1 :(得分:0)
如果你对WCF(这是我个人对页面方法的偏好)和转换器不感兴趣(同意这一点 - 设置像json序列化一样复杂的东西是过度杀戮),剩下要做的就是破解:< / p>
[WebMethod]
public static string UpdateStudent(Dictionary<string, object> studentContent)
{
// serialize generic json dictionary to json - once again :)
string json = JsonConvert.SerializeObject(studentContent);
// now you have string you can "properly" deserialize
var student = JsonConvert.DeserializeObject<Student>(json);
// ...
return string.Empty;
}
几乎任何json对象都可以描述为Dictionary<string, object>
,其中value可以是字符串类型,也可以是其他Dictionary<string, object>
。