Json.NET中的可选字段类型

本文关键字:字段 类型 NET Json | 更新日期: 2023-09-27 18:21:10

有人做了一个非常糟糕的设计决定,可以为我提供一个具有"特殊"结构的JSON。简化问题:

{
    "messed-up": "string"
}
{
    "messed-up": { "nested": "value" }
}

基本上,字段(在我的例子中隐藏得很深)可以是字符串,也可以是更复杂的对象。我需要创建这样一个类结构,允许我:

  • 执行序列化/反序列化
  • 生成架构

因此,我需要这样的东西:

public class NotFunny
{
    [JsonProperty("messed-up", NullValueHandling = NullValueHandling.Ignore)]
    public string messedUp;
    [JsonProperty("messed-up", NullValueHandling = NullValueHandling.Ignore)]
    public Alternative messedUpAlternative;
}
public class Alternative
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string nested;
}

然而,由于显而易见的原因,这是行不通的。我的问题是:如何处理这个令人悲伤的案件?

非常感谢您的帮助!

Json.NET中的可选字段类型

您可以尝试使用dynamic类型来实现此目的。

样品

我的样品与Newtonsoft.Json:

using Newtonsoft.Json.Linq;
dynamic data1 = JObject.Parse(str1);
if (data1.messed_up is JValue)
    Console.WriteLine(data1.messed_up);
if (data1.messed_up is JObject)
    Console.WriteLine(data1.messed_up.nested);