在ASP.Net WebForms中更改默认JSON序列化

时间:2015-11-23 06:00:44

标签: asp.net json webforms pagemethods

可以在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'};

它有效!!!

2 个答案:

答案 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>