我有一个需要将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。
非常感谢 马尔滕
答案 0 :(得分:0)
字符串和字符串数组均继承自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};
}