2016-07-19 35 views
1

我想將List<some_object>轉換爲JSON。如何將列表<object>序列化爲JSON屬性集(非JSON數組)

public class some_object 
{ 
    public string field1 {get; set;} 
    public string field2 {get; set;} 
} 

我想序列是:

var somejson = new { 
    some_objects = new List<some_object>() {...some items...}; 
} 

標準系列化生產的一個數組:

{ 
    "some_objects": [ 
    { 
     "field1":"value1", 
     "field2":"value2" 
    }, 
    { 
     "field1":"value3", 
     "field2":"value4" 
    } 
    ] 
} 

相反,我想產生這樣的事情(更象XML):

{ 
"some_objects": 
    { 
    "some_object": {"field1":"value1", "field2":"value2"}, 
    "some_object": {"field1":"value3", "field2":"value4"} 
    } 
} 

有什麼方法可以產生這個結果?

回答

2

沒有,JSON對象的屬性必須是唯一的

所有對象的屬性的需要是不同的。從概念上講,XML代表一個對象,但標籤不直接鏈接到屬性的概念。該JSON的方式做這將是你貼什麼:

{ 
    "some_objects": [ 
      {"field1":"value1", "field2":"value2"}, 
      {"field1":"value3", "field2":"value4"} 
    ] 
} 

或者,使用一本字典給項目唯一名稱

如果你想給每個項目,然後可以用來訪問他們的名字,你可以使用字典:

var dict = new { 
     some_objects = new Dictionary<string,some_object>(){ 
      { "a" , new some_object { field1="value1",field2="value2" } }, 
      { "b" , new some_object { field1="value3",field2="value4" } }, 
      } 
} 

這將序列化爲:

{ 
"some_objects": 
    { 
    "a": {"field1":"value1", "field2":"value2"}, 
    "b": {"field1":"value3", "field2":"value4"} 
    } 
} 
0

沒有,因爲你會得到具有相同名稱的對象,叫做:some_object

想......如果你能做到這一點,你將如何引用其中之一,採用some_objects.some_object你怎麼知道這是?

0

它好像你想存儲某種類型的元數據,特別是對象的類型,在XML中你可以使用一個屬性。你將不得不做一些像添加一個單獨的屬性:

public class some_object 
{ 
    public string typeText { get { return GetType().ToString(); } } 

    public string field1 { get; set; } 
    public string field2 { get; set; } 
} 

這在理論上將產生JSON看起來像:

{ 
    "some_objects": [ 
    { 
     "typeText":"MyNamespace.some_object", 
     "field1":"value1", 
     "field2":"value2" 
    }, 
    { 
     "typeText":"MyNamespace.some_object", 
     "field1":"value3", 
     "field2":"value4" 
    } 
    ] 
} 

根據您的需求,您可能希望這種元數據封裝成其自己的班級。