VB.NET中的JSON序列化技术

时间:2017-06-02 01:42:15

标签: json vb.net

以下序列化方法有什么区别?

  1. 第一种方法

    JsonConvert.SerializeObject(列表或数据表)

  2. ,输出

    即。 (3)[对象,对象,对象]

    1. 第二种方法
    2. Dim parent = Prtdata
                      Dim lGridColumns = New With {
                          Key .data = parent
                              }
                      Dim Setting = New JsonSerializerSettings
                      Setting.PreserveReferencesHandling = PreserveReferencesHandling.Objects
                      Dim jsonObject = JsonConvert.SerializeObject(lGridColumns, Formatting.Indented)
                      Return jsonObject

      ,其输出为

      {
        "data": [
          {
            "RecID": 2383,
            "PrtStatus": 0,
            "PtFilenum": 15090248,
            "PrtFilenum": 13090701,
            "FullName": "asdasd",
            "DOB": "04 Oct 1985"
          },
          {
            "RecID": 3387,
            "PrtStatus": 1,
            "PtFilenum": 15090248,
            "PrtFilenum": 15120996,
            "FullName": "marwam mohmmad  saleem",
            "DOB": "24 May 2017"
          },
          {
            "RecID": 3388,
            "PrtStatus": 1,
            "PtFilenum": 15090248,
            "PrtFilenum": 170227111,
            "FullName": "asd dsf as a",
            "DOB": "27 Feb 2017"
          }
        ]
      }

      为什么输出在浏览器控制台中看起来不同?

1 个答案:

答案 0 :(得分:1)

作为第一条评论,您可以在NewtonSoft.json的网站上找到Serialization Guide,在我的回答中我只是提供了我之前评论的更精细版本。

第一个场景是序列化实现IEnumerable的东西(例如:list,array),将由Json中的数组表示,例如:

[{ "property": "value", "id": 0 }, {"property": "value", "id": 1}]

对于第二种情况,您正在做不同的事情,例如,您在PreserveReferencesHandling中提供JsonSerializerSettings,这也会预先保存您要序列化的对象中的任何引用,例如:< / p>

[{"$id": 1, "title": "item1"}, {"$id": 2, "title": "item2", "previous": { "$ref": 1 }]

这将确保在反序列化时,第二个对象将在属性previous内包含对第一个对象的引用。

你做的另一件事就是提供Formatting.Indented,这将创建一个更易于阅读的json文档,包含换行符和缩进。之前的Json将变成类似的东西:

[{
    "$id": 1,
    "title": "item1"
},
{
    "$id": 2,
    "title": "item2",
    "previous": {
        "$ref": 1
    }
}]

而且,最后一个很大的区别是,在上一个示例中,您正在序列化单个对象,导致它的公共属性被序列化,例如:

{
    "data": [
        ...
    ]
}

data是您要序列化的对象的属性。