是 json
{"id": 20, "name": "name", "multiple": true, "value":[]}
还有这样的Json
{"id": 21, "name": "name", "value": ""}
我想将其泛化为一种类型
public class MyClass
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("multiple")]
public bool IsMultiple { get; set; }
[JsonProperty("value")]
public string[] Values { get; set; }
}
我想自动解析
var mc = JsonConvert.DeserializeObject<MyClass>(json);
问题是当单个值进来时,反序列化器无法将其解析为数组。怎么教他这个?
升级版:
顺便说一句,它没有用。这是我挂在属性上的转换器代码
public class SingleOrArrayConverter : JsonConverter<string[]>
{
public override string[] ReadJson(JsonReader reader, Type objectType, string[] existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var res = new List<string>();
var type = reader.ValueType;
var flag = true;
while (flag)
{
switch (reader.TokenType)
{
case JsonToken.String:
res.Add(reader.Value.ToString());
break;
case JsonToken.EndObject:
case JsonToken.StartArray:
case JsonToken.EndArray:
break;
default:
throw new InvalidOperationException();
}
flag = reader.Read();
}
return res.ToArray();
}
public override void WriteJson(JsonWriter writer, string[] value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
结果,现在这两种情况都不起作用。测试失败并出现错误
消息:测试方法 TapSyncTests.JsonMappingTests.RmCustomFieldMultipleParseTest 抛出异常:Newtonsoft.Json.JsonSerializationException:反序列化对象时意外结束。路径'',第 1 行,位置 70..
在反序列化的时候。转换器因此正确实现。
如果你只需要反序列化,最简单的写法是:
然后: