2017-06-07 10 views
0

Webサービスの場合、ストアドプロシージャによって与えられたデータに基づいて応答として送信される動的JSON配列を作成する必要があります。フォームC#での動的JSON配列

var t = new Dictionary<string, dynamic>(); 
for (int i = 0; i < reader.FieldCount; i++) 
{ 
    columnName = reader.GetName(i); 
    fieldValue = reader.GetValue(i).ToString(); 
    t[columnName] = fieldValue; 
} 
_response.data.Add(t); 

しかし、受信したレスポンスデータである:[[{ "キー": "名前"、 "値": "123"}、{ "日付": "01-Junの-2017"}]、[ [{"name"、 "abc"、 "date": "01-Jun-2017"}、[{"name"、 "value": "abc"}]]

}、{"name": "123"}]

問題の原因を教えてもらえますか?

ありがとうございました。

+1

あなたが Vikhram

+0

を読んでどのように見て良いだろう文字列、動的> 'あなたは値の文字列をキャストしているとにかく。第二に@Vikhramは言った - それはあなたが使用しているJSONシリアライザに依存します。例えばNewtonsoftは、これを 'JObject'と呼ばれるクラスに提供します。 –

+0

あなたはこれを確認できますか?https://stackoverflow.com/questions/5597349/how-do-i-convert-a-dictionary-to-a-json-string-in-c辞書をjsonに変換してください。 –

答えて

0

あなたの時間を節約することができあなたのJSONの構造に似たC#クラスを作成する必要があります。

その後、
public class SomeClassName 
{ 
    public string name { get; set; } 
    public string date { get; set; } 
} 

代わりの辞書は、次のように上記のクラスのリストを使用します。

List<SomeClassName> t = new List<SomeClassName>(); 
for (int i = 0; i < reader.FieldCount; i++) 
{ 
    t.Add(new SomeClassName() { name = reader.GetName(i), date = reader.GetValue(i).ToString() }); 
} 
_response.data.Add(t); 
0

あなたはC#で匿名型を使用することができます。

new { key = value, ...}; 

List<object> lst = new List<object>(); 
lst.Add(new { Name = "Andrey", Age = 31 }); 
lst.Add(new { Name = "Martha" }); 

// print [{"Name":"Andrey","Age":31},{"Name":"Martha"}] 
Console.WriteLine(JsonConvert.SerializeObject(lst)); 
+0

キーと値の両方が動的に生成され、その可能性がわかりません。だから、名前と年齢をリストに直接追加することはできません! –