2015-02-09 59 views
0

我获取从JSON文件&字符串想将其转换为键值对。C# - JSON以核心价值和反之亦然

我正在使用JSON.NET。

我知道我可以使用反序列化一个列表:

List<JsonClass> jsonFileComments = JsonConvert.DeserializeObject<List<JsonClass>>(json); 

我可以使用反序列化数组:

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); 

但正如我的JSON字符串包含列表中只有一个文件&阵列。该序列是这样的:

{ 
    List, 
    List, 
    List, 
    Array, 
    List, 
    Array, 
    List 
} 

你能告诉我如何使用单一方式反序列化它。

另一种方式是,我需要分离出阵列&工作单独上。再次序列化时,我需要处理那些东西。

+0

大多数时候,你会反序列化JSON字符串转换成具体的C#类型。你能展示你正在使用的JSON吗? – 2015-02-09 14:11:29

回答

1

好办法之一是使用dynamic(该类型是静态类型,但dynamic类型的对象绕过静态类型检查。)?

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}"); 

Console.WriteLine(d.number); 
Console.WriteLine(d.str); 
Console.WriteLine(d.array.Count); 
+0

Thanks Margus ...这个动态关键字解决了我的问题... – 2015-02-09 15:25:17

+0

嗨Margus,这个动态关键字在Windows应用程序中工作,但是当我去了Web应用程序,我真的想要使用它时,它会抛出错误说“动态操作只能在同质AppDomain中执行。“....任何建议? – 2015-02-11 13:09:20

+0

@SanjayAdsure您是否在pre .net4.0上运行您的应用程序?您可以尝试将其加载到另一个应用程序域(http://www.bryancook.net/2010/02/running-code-in-separate-appdomain.html) – Margus 2015-02-11 13:32:55

0

希望这段代码块有所帮助。我假设你有JSON对象&你需要通过它来解析:

Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(yourJsonData); 
Newtonsoft.Json.Linq.JArray textArray = (Newtonsoft.Json.Linq.JArray)o["yourArray"]; 
if (textArray.Count > 0) 
{ 
for (int i = 0; i < textArray.Count; i++) 
{//do something} 
}