我確信某處有一個簡單的答案來回答我的問題,但我無法找到它。我面臨的問題是下面,我有一些代碼結構:序列化/反序列化扁平結構中的嵌套對象
class Field
{
List<Block> Blocks {get;set;}
public static Field CreateField()
{
var A = new Block {Connector = new Connector()}
var B = new Block {Connector = new Connector()}
A.Connector.ConnectedTo.Add(B);
B.Connector.ConnectedTo.Add(A);
var field = new Field();
field.Blocks = new List {A, B};
return field;
}
}
class Block
{
Connector Connector {get;set;}
}
class Connector
{
List<Block> ConnectedTo {get;set;}
}
比系列化命令使用json.net:
JsonConvert.SerializeObject(Field.CreateField(), Formatting.Indented, new JsonSerializerSettings {PreserveReferencesHandling = PreserveReferencesHandling.Objects});
,並輸出結果不出所料:
{
"$id": "1",
"Blocks": [
{
"$id": "2",
"Connector": {
"$id": "3",
"ConnectedTo": [
{
"$id": "4",
"Connector":{
"$id": "5",
"ConnectedTo": [
{
"$ref": "2"
}
]
}
}
]
}
}
]
}
有任何方式有序列化結果如下:
{
"$id": "1",
"Blocks": [
{
"$id": "2",
"Connector": {
"$id": "3",
"ConnectedTo": [
{
"$ref": "4"
}
]
}
},
{
"$id": "4",
"Connector":{
"$id": "5",
"ConnectedTo": [
{
"$ref": "2"
}
]
}
}
]
}
謝謝。
爲什麼你需要它扁平化?看看你如何使用循環引用序列化數據:http://johnnycode.com/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/ – Kvam
Kvam,謝謝爲迴應。起初,我需要它是人類友好的(用戶應該能夠打開json文件並修改它),現在幾乎不可能在何處以及如何從它開始。然後用10-20塊輸出文件看起來幾乎不可能使用json路徑修改,特別是當我們需要替換某些東西(版本升級過程)時。 – Anton