關於Newtonsoft Json中的集合數據轉換


1.嵌套屬性的類序列化時會報錯.

如:

class Person

{

public string Name { get; set; }

public int Age { get; set; }

public string Gender { get; set; }

public string Remark { get; set; }

public List<Person> Group { get; set; }

}

PersonA中有一個List<Person>屬性,這將導致序列化時,如果這個屬性中有對象自身,那么這個樹就會無限循環,所以拋異常.
 

   

  1. 還是以上邊的示例,在用JsonConvert.SerializeObject()方法時,如果序列化Person.Group這樣的集合屬性,其Json文本是如下這樣的:

{

"Name": "Park",

"Age": 52,

"Gender": "male",

"Group": [

{

"Name": "Jack",

"Age": 32,

"Gender": "male"

},

{

"Name": "Lily",

"Age": 23,

"Gender": "female"

},

{

"Name": "Ted",

"Age": 13,

"Gender": "male",

"Remark": "his is child"

}

]

}

但如果序列化的是一個List<Person>集合,其文本是如下這樣的:

[{"Name":"Jack","Age":32,"Gender":"male","Remark":null},{"Name":"Lily","Age":23,"Gender":"female","Remark":null},{"Name":"Ted","Age":13,"Gender":"male","Remark":"his is child"}]

而我們持續向某一個Json文本中添加Serialized后的JsonText,結果是向下邊這樣的:

{

"Name": "Jack",

"Age": 32,

"Gender": "male"

}

{

"Name": "Ted",

"Age": 13,

"Gender": "male",

"Remark": "his is child"

}

{

"Name": "Park",

"Age": 52,

"Gender": "male"

}

   

// 注意,這種文件不符合Json文檔格式,在Deserialize時會拋出異常:

Newtonsoft.Json.JsonReaderException:"Additional text encountered after finished reading JSON content: {. Path '', line 5, position 1."

  

   

  1. 使用JsonConvert.DeserializeObject()方法時,非泛型方法然后再通過as TargetType的方法是不管用的,返回的還是一個null.

Person result1 = JsonConvert.DeserializeObject(jackJson) as Person;

   

附錄:全部測試代碼放在了下邊

using Newtonsoft.Json;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

   

namespace TestConsoleApp

{

class Program

{

static void Main(string[] args)

{

var jack = new Person() { Name = "Jack", Age = 32, Gender = "male" };

var lily = new Person() { Name = "Lily", Age = 23, Gender = "female" };

var park = new Person() { Name = "Park", Age = 52, Gender = "male" };

var ted = new Person() { Name = "Ted", Age = 13, Gender = "male", Remark = "his is child" };

List<Person> group1 = new List<Person>() { jack, lily, ted };

//park.Group = group1;

//jack.Group = group1;

//lily.Group = group1;

//ted.Group = group1;

   

JsonSerializerSettings jsSetting = new JsonSerializerSettings();

jsSetting.NullValueHandling = NullValueHandling.Ignore;

string jackJson = JsonConvert.SerializeObject(jack, Formatting.Indented, jsSetting);

string tedJson = JsonConvert.SerializeObject(ted, Formatting.Indented, jsSetting);

string groupJson = JsonConvert.SerializeObject(group1);

string parkJson = JsonConvert.SerializeObject(park, Formatting.Indented, jsSetting);

Console.WriteLine(jackJson);

Console.WriteLine(tedJson);

Console.WriteLine(parkJson);

string jsonTextColl = jackJson + tedJson + parkJson;

Person result1 = JsonConvert.DeserializeObject(jackJson) as Person;

Person result2 = JsonConvert.DeserializeObject<Person>(jackJson);

List<Person> result3 = JsonConvert.DeserializeObject<List<Person>>(groupJson);

List<Person> result4 = JsonConvert.DeserializeObject(groupJson) as List<Person>;

List<Person> result5 = JsonConvert.DeserializeObject(jsonTextColl) as List<Person>;

Console.ReadKey();

}

}

   

class Person

{

public string Name { get; set; }

public int Age { get; set; }

public string Gender { get; set; }

public string Remark { get; set; }

//public List<Person> Group { get; set; }

}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM