2016-07-19 11 views
1

List<some_object>をJSONに変換したいと思います。List <object>をJSON配列(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" 
    } 
    ] 
} 

を、あなたはそのにこのメタデータをカプセル化する場合があります自分のクラス。

関連する問題