以下序列化方法有什么区别?
第一种方法
JsonConvert.SerializeObject(列表或数据表)
,输出
即。 (3)[对象,对象,对象]
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"
}
]
}
为什么输出在浏览器控制台中看起来不同?
答案 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
是您要序列化的对象的属性。