【问题标题】:Properties Order while Deserialization using JSON.Net使用 JSON.Net 反序列化时的属性顺序
【发布时间】:2015-11-12 15:45:00
【问题描述】:

我正在尝试使用 JsonConvert.DeserializeObject 将字符串反序列化为 JSON 对象,如下所示:

 var str = "{ Value: \"File\",Text: \"OWENS & MINOR  INFANT - 2228548\"}";
agreementnodes = JsonConvert.DeserializeObject<List<AgreementNode>>("[" + str + "]");

当 json 转换为数组时,属性按字母顺序排列。示例:即使 Value 是第一个并且 Text 在字符串中,属性也会显示如下:

即使在类声明中,I Value 也是 Firs,Text 是其次。但是在反序列化时,属性是按字母顺序排序的。

[JsonProperty(Order = 9)]
public string Value { get; set; }

[JsonProperty(Order = 10)]
public string Text { get; set; }

有什么方法可以保留结果数组中属性的顺序,比如我想要 resultantarray[0] = Value 和 resultantarray1 = Text?

【问题讨论】:

  • JS中对象的属性顺序是完全任意的,不能可靠地预先定义。你需要这个有什么特别的原因吗?如果是因为在 JsonProperty 属性上指定了 Order,则最好为属性的序列化定义一个 Name,而不是依赖于它们提供给 ModelBinder 的顺序。
  • 我将数据直接绑定到 JQuery 数据表,其中我有特定顺序的属性。我不想维护对象客户端的顺序,也不想构建一个新数组,因为它是返工。
  • 我的意思是,为什么它们按特定顺序排列?不能依赖对象属性按特定顺序排列。

标签: c# jquery .net json asp.net-mvc


【解决方案1】:

json.net 序列化器没有问题。它在快速监视和监视窗口中按字母顺序自动排序。如果需要,请检查 System.Web.HttpContext.SystemWebAssembly。这不是反序列化的代码。

【讨论】:

    【解决方案2】:

    根据规范未定义属性的顺序。尽管如此,最新的 ECMAScript (JavaScript) 规范需要一种有序的格式,这也支持新的酷应用程序,例如: https://cyberphone.github.io/openkeystore/resources/docs/jcs.html#ECMAScript_Compatibility_Mode

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2023-03-12
      相关资源
      最近更新 更多