2016-10-24 6 views
-1

は、私はこのようなJSONオブジェクトを生成NewtonSoft JobjectsJsonConvert、jオブジェクト、JProperty

JObject o = new JObject(new JProperty("DataSources", new JArray(from p in repDatasource.DataSources select JObject(JProperty("Columns", new JArray (from q in p.columns select new JObject(new JProperty("Name", q.Name),new JProperty("Type", q.Type)))))))); 

を作成し、次のコードを持っています。データソースと列が

"DataSources": { 
      "0": { 
       "Columns": { 
        "0": { 
         "Name": "CategoryID", 
         "Type": "System.String" 
        }, 
        "1": { 
         "Name": "CategoryName", 
         "Type": "System.String" 
        } 
       }, 
       "NameInSource": "Dk" 
      }, 
      "1": { 
       "Ident": "StiDataTableSource", 
       "Columns": { 
        "0": { 
         "Name": "pColumn1", 
         "Type": "System.String" 
        }, 
        "1": { 
         "Name": "pColumn2", 
         "Type": "System.String" 
        } 
       }, 
       "NameInSource": "Dk" 
      } 
     } 

すべてのアイデアは、(インデックスが存在し、その代わりに、配列の参照)私は配列の代わりに、このようなものを作成しているJSONを取得したい、実際Jarrays

{ 
    "DataSources": [{ 
     "Columns": [{ 
      "Name": "OSHYPROJECT__ProjectStatus", 
      "Type": "System.String" 
     }, { 
      "Name": "OSHYPROJECT__Pic", 
      "Type": "System.String" 
     }] 
    }, { 
     "Columns": [{ 
      "Name": "Complaint__Brand", 
      "Type": "System.Int32" 
     }, { 
      "Name": "Complaint__Group", 
      "Type": "System.Int32" 
     }] 
    }] 
} 

ですか?

+0

「int」をキーとして辞書を作成し、それをシリアル化する必要があります。 –

+0

この例はありますか? –

+1

あなたはここにこだわっていますか?これは簡単な翻訳です。オブジェクトをループして、適切に変形してください。 – Liam

答えて

1

リストまたは配列の代わりに辞書(intキーを使用)が必要です。その後、必要な構造でjsonにシリアル化できます。非常に一般的に言えば

、あなたがこの(dataSourcesがリストであると仮定した場合)のような何かを行うことができます:もちろん

var myDictionary = dataSources.Select((o,idx) => new { o, idx }) 
           .ToDictionary(k => k.idx, v => v.o); 

var json = JsonConvert.SerializeObject(myDictionary); 

をあなたはDataSourceの両方を変換する必要があるため、あなたのコードはもう少し複雑になります内にColumnsがありますが、原則は同じです。

さらに、通常の.NETオブジェクトを作成し、それをシリアル化することは、JObjectJArrayを直接使用する方が簡単だと付け加えます。それらのオブジェクトは低レベルであり、シリアライゼーションの非常に特別な処理を必要としない限り、それらを混乱させる必要はありません。

関連する問題