gpt4 book ai didi

c# - 如何使用 Newtonsoft JSON.NET 将 JSON 反序列化为 IEnumerable

转载 作者:IT王子 更新时间:2023-10-29 03:44:28 35 4
gpt4 key购买 nike

给定这个 JSON:

[
{
"$id": "1",
"$type": "MyAssembly.ClassA, MyAssembly",
"Email": "me@here.com",
},
{
"$id": "2",
"$type": "MyAssembly.ClassB, MyAssembly",
"Email": "me@here.com",
}
]

和这些类:

public abstract class BaseClass
{
public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}

如何将 JSON 反序列化为:

IEnumerable<BaseClass> deserialized;

我不能使用 JsonConvert.Deserialize<IEnumerable<BaseClass>>()因为它提示 BaseClass是抽象的。

最佳答案

你需要:

JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};

string strJson = JsonConvert.SerializeObject(instance, settings);

所以 JSON 看起来像这样:

{
"$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
"$values": [
{
"$id": "1",
"$type": "MyAssembly.ClassA, MyAssembly",
"Email": "me@here.com",
},
{
"$id": "2",
"$type": "MyAssembly.ClassB, MyAssembly",
"Email": "me@here.com",
}
]
}

然后你可以反序列化它:

BaseClass obj = JsonConvert.DeserializeObject<BaseClass>(strJson, settings);

文档:TypeNameHandling setting

关于c# - 如何使用 Newtonsoft JSON.NET 将 JSON 反序列化为 IEnumerable<BaseType>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6348215/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com