2014-07-02 53 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。那么你的答案。 –