自定义 JSON.net 反序列化为字典<字符串、字符串>
本文关键字:字符串 字典 JSON net 反序列化 自定义 | 更新日期: 2023-09-27 18:33:52
我希望使用 JSON.net 将JSON结构反序列化为字典。 诀窍是 JSON 文档是嵌套对象的层次结构,但我只想查看顶级属性 + 值对。
例如。
{
"prop1": 142,
"prop2": "Some description",
"object_prop": {
"abc": 2,
"def": {
"foo": "hello",
"bar": 4
}
}
}
基于上面的例子,我想让我的反序列化字典中有 3 个项目:"prop1"、"prop2"和"object_prop"。 "object_prop"应该只是一个字符串(我将在稍后的某个时间点将其反序列化为对象。
注意:我希望这样做,因为我想创建一个可重用的库,它只知道顶级键/值对,以及使用该库的客户端可以在以后的时间点定义值的类型。 (即。我不希望我的可重用库绑定到对象类型...即"object_prop")。
这样的事情怎么样?
class Program
{
static void Main(string[] args)
{
string json = @"
{
""prop1"": 142,
""prop2"": ""Some description"",
""object_prop"": {
""abc"": 2,
""def"": {
""foo"": ""hello"",
""bar"": 4
}
},
""prop3"": 3.14
}";
Dictionary<string, string> dict = new Dictionary<string, string>();
JObject jo = JObject.Parse(json);
foreach (JProperty prop in jo.Properties())
{
if (prop.Value.Type == JTokenType.Array ||
prop.Value.Type == JTokenType.Object)
{
// JSON string for complex object
dict.Add(prop.Name, prop.Value.ToString(Formatting.None));
}
else
{
// primitive value converted to string
object value = ((JValue)prop.Value).Value;
dict.Add(prop.Name, value != null ? value.ToString() : null);
}
}
foreach (KeyValuePair<string, string> kvp in dict)
{
Console.WriteLine(kvp.Key + " = " + kvp.Value);
}
}
}
输出:
prop1 = 142
prop2 = Some description
object_prop = {"abc":2,"def":{"foo":"hello","bar":4}}
prop3 = 3.14