【问题标题】:Change Default JSON Serialization in ASP.Net WebForms更改 ASP.Net WebForms 中的默认 JSON 序列化
【发布时间】:2016-02-25 04:15:00
【问题描述】:

嗯,它可以在 MVC 和 WebAPI 中完成。但是有没有办法更改 ASP.Net Web 窗体中的默认序列化程序?我们使用Newtonsoft.JSON 通过网络发送对象。它使用CamelCasePropertyName,所以C#中的FirstName在JSON中变成firstName。现在,当我们需要将对象传递回服务器以供 web methods 使用时,我们必须使用 FirstName 属性而不是 firstName 创建新对象,否则 ASP.Net 会抱怨并且请求失败。

我真诚地希望我缺少一些非常简单直接的东西。

编辑:- 好吧,通过实现类型的自定义转换或使用 Web 服务或 wcf 或迁移到 MVC/WebAPI 来克服这些问题,一切都很好。我们试图实现的是通过使用经典的页面方法(如果这样说的话)ASP.Net web-forms。

我一直在寻找某种方法来插入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'};

有效!!!

【问题讨论】:

标签: asp.net json webforms pagemethods


【解决方案1】:

C# 和 Javascript 都是区分大小写的语言。所以 FirstName 和 firstName 的处理方式不同。

如果您不想使用 Newtonsoft.JSON,您可以使用DataContractJsonSerialize 将 JSON 数据序列化和反序列化为 C# 类型。为此,您应该具有匹配的 C# 类型。

请查看以下对您有帮助的MSDN 链接。

【讨论】:

  • 嗯,这不是关于 WCF 的吗?
  • 序列化逻辑为标准逻辑,可用于ASP.Net、MVC、WCF、c#等
【解决方案2】:

如果您对 WCF(这将是我个人对页面方法的偏好)和转换器不感兴趣(同意这一点 - 设置像 json 序列化这样复杂的东西是矫枉过正的),剩下要做的就是破解:

[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&lt;string, object&gt;,其中值可以是字符串类型或另一个Dictionary&lt;string, object&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2013-01-13
    • 2013-09-01
    • 2013-04-18
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多