【发布时间】:2020-01-08 22:52:20
【问题描述】:
假设我有这个 JSON:
{
"top.level": {
"mykey": "3.301.0.97",
"mykey2": "not interested in this one"
},
"another.top.level": "not interested in this either"
}
我希望使用 Json.NET 来解析这个字符串,并获取“mykey”的值。
我有两个问题:
- 如何在不使用 C# 的强类型的情况下做到这一点,同时优雅地处理 JSON 没有
top.level或mykey的场景?我不想最终抛出 NullReferenceExceptions 或类似的东西。还有比下面更优雅的答案吗?
string answer;
var jsonObj = JObject.Parse(jsonString);
if (jsonObj != null)
{
var topElement = jsonObj["top.level"];
if (topElement != null)
{
var keyElement = topElement["mykey"];
if (keyElement != null)
{
answer = keyElement.Value<string>();
}
}
}
- 假设我确实想使用强类型。考虑到
top.level中存在句点,我该怎么做?考虑到我忽略了mykey2和another.top.level,我会创建什么类型定义?
我也愿意在不使用 Json.NET 的情况下使用任何 .NET 的内置序列化机制来做这两件事,因此欢迎所有想法和建议。谢谢!
【问题讨论】:
-
“优雅”是什么意思?如果您的示例感觉太混乱,请将其隐藏在方法中。
-
你也可以试试
jsonObj["top.level"]?.topElement["mykey"]?.Value<string>();
标签: c# json serialization json.net deserialization