我正在將數據寫入JSON格式以供其他程序使用。我需要將大量的JSON對象序列化到一個文件中。使用JSON.net這實在是直線前進與以下幾行代碼連載:自定義JSON.net序列化和反序列化
[JsonConverter(typeof(SimpleClassSerializer))]
public class SimpleClass
{
public string name;
}
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
string serialised = JsonConvert.SerializeObject(obj1, Formatting.Indented);
給輸出:
{
"name": "exampleObj1"
}
我實際上將多SimpleClass(例如類)對象和工作想要將它們全部序列化(因爲我收到它們)。
使用下面的示例代碼,這是好的和簡單,如果我有一個數組或列表:
SimpleClass[] arr1 = new SimpleClass[3];
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
SimpleClass obj2 = new SimpleClass { name = "exampleObj2" };
SimpleClass obj3 = new SimpleClass { name = "exampleObj3" };
arr1[0] = obj1;
arr1[1] = obj2;
arr1[2] = obj3;
string serialised = JsonConvert.SerializeObject(arr1, Formatting.Indented);
給我下面的輸出:
[
{
"name": "exampleObj1"
},
{
"name": "exampleObj2"
},
{
"name": "exampleObj3"
}
]
這是很容易反序列化到一個數組。因爲我不知道我正在處理的對象的數量,並且由於內存約束(每個對象中的數據),所以我不能先聲明一個數組(例如string [] arr = new string [50000])。很大)。主要因爲內存限制,我也無法使用列表。
如果我做到以下幾點:
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
SimpleClass obj2 = new SimpleClass { name = "exampleObj2" };
SimpleClass obj3 = new SimpleClass { name = "exampleObj3" };
string serialised = JsonConvert.SerializeObject(obj1, Formatting.Indented);
serialised += JsonConvert.SerializeObject(obj2, Formatting.Indented);
serialised += JsonConvert.SerializeObject(obj3, Formatting.Indented);
給我這個:
{
"name": "exampleObj1"
}{
"name": "exampleObj2"
}{
"name": "exampleObj3"
}
這裏最主要的是,我有一個開放的文件,我流的序列化對象到文件我收到他們。給我這個格式如上所示。當試圖反序列化這樣的對象時,我得到一個錯誤,因爲它基本上期望它是一個數組。
以這種方式實現連續序列化的最佳方法是什麼?
理想情況下,如果我可以做一些自定義序列化,我開始在開頭寫入「[」到文件末尾(和逗號在每個對象之間),然後消費應用程序可以反序列化成數組。我該怎麼做呢?
Json.net有一個JsonWriter和JsonSerializer。看到這個詹姆斯牛頓 - 金博客文章。 http://james.newtonking.com/archive/2009/02/14/writing-json-to-a-file-using-json-net – cgotberg 2014-09-02 20:19:25
太棒了!這真的很有幫助! – 2014-09-02 20:38:31