使用 C# 反序列化 JSON

Deserialize JSON using C#

我正在尝试使用 Newtonsoft.Json

将此 JSON 字符串反序列化为 C# 中的不同对象
{"apple":{"title":"apple","color":"red"},"banana":{"title":"banana","color":"yellow"}}

注意本例中的 "apple" 和 "banana" 是动态值,因此很可能突然被称为其他名称,例如凤梨。

现在我要做的是反序列化这个 JSON 字符串,这样我可以在所有对象(Apple、Banana 等)中执行 foreach 循环以读取值color 字段。

但显然我做错了什么,这是我的代码。

dynamic d = JObject.Parse(jsonString);
            foreach (dynamic e in d)
            {
                Console.WriteLine(e.title);
            }

有谁知道为什么这不起作用?

尝试使用 System.Web.Script.Serialization 然后执行以下操作:

var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, dynamic>>(YOURJSON);

要使用此操作:

string item = dict["name"];
string itema = dict["item"]["thing"];

希望对您有所帮助。

您想 e.Value.title 而不仅仅是 e.title

DotNetFiddle example here.

e 是一个 KeyValuePair<String,JToken> 所以我们需要访问 e.Value 来得到 title.

var d = JObject.Parse(@"{""apple"":{""title"":""apple"",""color"":""red""},""banana"":{""title"":""banana"",""color"":""yellow""}}");

foreach (dynamic e in d)
{
    Console.WriteLine(e.Value.title);
}