我需要将一些JSON解析为C#中的对象。我看过Newtonsoft和JavaScriptSerializer,但要么我不知道如何很好地使用它们,要么他们在处理可能改变的格式方面做得很差,并且对于复杂的结构来说很尴尬。我想要一些我可以做的事情:
JsonObject j = Deserialize(mystring);
String[] earthColors = j.maps["earth"].colors;
并不关心结构的其余部分。
答案 0 :(得分:4)
我认为您应该重新考虑不使用Json.Net
string mystring =
@"
{
""maps"": {
""earth"": {
""colors"": [
""blue"",
""green""
]
},
""moon"": {
""colors"": [
""black"",
""white""
]
}
}
";
dynamic j = JsonConvert.DeserializeObject(mystring);
foreach (var c in j.maps["earth"].colors)
{
Console.WriteLine(c);
}
答案 1 :(得分:0)
这是将JSON转换为对象的通用方法(请务必包含System.Web.Script.Serialization
):
public static T JsonToObject<T>(string JsonData)
{
// Deserialize the JSON into the object
JavaScriptSerializer jss = new JavaScriptSerializer();
T rf = (T)jss.Deserialize(JsonData, typeof(T));
return rf;
}
要将对象转换回JSON,请使用以下常规方法:
public static string ObjectToJson<T>(T rf)
{
// Serialize the object as JSON
StringBuilder sb = new StringBuilder();
JavaScriptSerializer jss = new JavaScriptSerializer();
jss.Serialize(rf, sb);
return sb.ToString();
}
要使用它,只需创建与JSON响应匹配的类,然后调用JsonToObject
方法。
JsonObject j = JsonToObject(mystring);
对于更具动态性的方法,您需要查看以下内容:
JavaScriptSerializer jss = new JavaScriptSerializer();
var JsonObject = jss.Deserialize<dynamic>(mystring);
这将动态创建JsonObject
,然后您可以使用Dictionary
样式访问器,而无需预先创建类。因此,对于给定的JSON响应
{ "maps": ["earth": {"colors": ["purple","chartreuse"] }] }
将动态创建c类,可以作为
进行访问JsonObject.maps["earth"].colors[0] == "purple";
JsonObject.maps["earth"].colors[1] == "chartreuse";