反序列化同一字段的字符串和字符串数组[重复]

问题描述 投票:-1回答:1

我有一个需要将json反序列化为对象的用例。 json如下

{
    "additionalAttributes": [
        {
            "name": "type",
            "value": "action"
        },
        {
            "name": "pages",
            "value": [                
                "34",
                "39",
                "43"
            ]
        },
        {
            "name": "chapters",
            "value": [                
                "The dawn of time",
                "The end of the world"
            ]
        }
   ]
}

困难的部分是value是字符串或字符串数​​组。即使对象中只有一个字符串,生成的对象也应该具有字符串数组。

如何使用json.net做到这一点?反序列化器抱怨第一个值不是字符串数组。

我无法更改源json。

非常感谢马尔滕

c# json
1个回答
1
投票

字符串和字符串数组都继承自object。这样您的模型可以看起来像这样

public class AdditionalAttribute
{
    public string name { get; set; }
    public object value { get; set; }
}

然后,您必须将对象拆箱为两种类型之一。

另一个选择是使用隐式运算符将值定义为部分结构,如下所示>>

public partial class AdditionalAttribute
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("value")]
    public Value Value { get; set; }
}

public partial struct Value
{
    public string _value;
    public List<string> _valueArray;

    public static implicit operator Value(string value) => new Value { _value = value};
    public static implicit operator Value(List<string> valueArray) => new Value { _valueArray= valueArray};
}
© www.soinside.com 2019 - 2024. All rights reserved.