2014-07-02 75 views
0

我有一個要求使用C#對象生成以下JSON:C#JSON對象的動態變量

現在使用HttpResponseMessage(網頁API)進出口所以我不需要任何JSON.NET從我的目標做任何額外的轉換。

returnVal = Request.CreateResponse(HttpStatusCode.OK, new Model.Custom.JsonResponse 
       { 
        data = root, 
        success = true 
       }); 

這是我需要生成JSON:

'data': [{ 
    'some var 1': 'value A', 
    'some var 2': 'value B', 
    'some var 3': 'value C' 
}, { 
    'some var 1': 'value A', 
    'some var 2': 'value B', 
    'some var 3': 'value C' 
}, { 
    'some var 1': 'value A', 
    'some var 2': 'value B', 
    'some var 3': 'value C' 
}] 

哪裏'some var'是動態的。

現在我試圖用List<Dictionary<string,object>>();但問題是,這種方法我只能產生這樣的:

'data': [{ 
    'some var 1': 'value A' 
}, { 
    'some var 1': 'value A' 
}, { 
    'some var 1': 'value A' 
}] 

我的實際類是這樣的:

public class RootObject { 
    public bool success { 
     get; 
     set; 
    } 
    public List < Dictionary < string, object >> jsonData { 
     get; 
     set; 
    } 
} 

var root = new RootObject(); 

root.jsonData = new List < Dictionary < string, object >>(); 

// create new record 
var newRecord = new Dictionary < string,object >(); 
newRecord.Add("1", "H"); // 1 = some var 1, H = value A 
// add record to collection 
root.jsonData.Add(newRecord); 

// create new record 
newRecord = new Dictionary < string, object >(); 
newRecord.Add("5", "L"); 
// add record to collection 
root.jsonData.Add(newRecord); 

因此,這將輸出:

'data': [{ 
    '1': 'H' 
}, { 
    '5': 'L' 
}] 

任何線索?由於

回答

1
public class MyClass 
{ 
    public List<JObject> data = new List<JObject>(); 
} 

var m = new MyClass(); 
m.data.Add(new JObject()); 
m.data.Add(new JObject()); 

m.data[0]["some var 1"] = "value A"; 
m.data[0]["some var 2"] = "value B"; 
m.data[0]["some var 3"] = "value C"; 

m.data[1]["some var 1"] = "value A"; 
m.data[1]["some var 2"] = "value B"; 
m.data[1]["some var 3"] = "value C"; 

var json = JsonConvert.SerializeObject(m); 

OUTPUT

{ 
    "data": [ 
    { 
     "some var 1": "value A", 
     "some var 2": "value B", 
     "some var 3": "value C" 
    }, 
    { 
     "some var 1": "value A", 
     "some var 2": "value B", 
     "some var 3": "value C" 
    } 
    ] 
} 
0

你只需要更多的元素添加到您的字典:

newRecord.Add("1", "H"); 
newRecord.Add("2", "I"); 
newRecord.Add("3", "J"); 
+1

這將只輸出{ 「1」: 「H」},{ 「2」: 「I」},{ 「3」: 「J」},而不是{ 「1」 :「H」,「2」:「I」,「3」:「J」} – VAAA

+0

因爲在newRecord之後,我必須將newRecord添加到Dictionary List。 – VAAA

+1

看起來你正在得到糟糕的DataContractJsonSerializer的行爲。您可能想嘗試將其替換爲JSON.NET:http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web- api.aspx –

0

這是我所得到的,當我貼你的JSON到Visual Studio 「爲JSON」:

public class Rootobject 
{ 
    public Datum[] data { get; set; } 
} 

public class Datum 
{ 
    public string somevar1 { get; set; } 
    public string somevar2 { get; set; } 
    public string somevar3 { get; set; } 
} 
+0

這不會是動態的。因爲該類具有固定的變量名稱。 – VAAA

+0

看起來像@ L.B。那麼你的答案。 –