如何使用Json.Net反序列化枚举数组?
我有这样的JSON:
[{ "agencyId": "myCity", "road": { "note": "", "lat": "45.321", "lon": "12.21", "streetCode": "290", "street": "street1", "fromNumber": "", "toNumber": "", "fromIntersection": "", "toIntersection": "" }, "changeTypes": ["PARKING_BLOCK", "ROAD_BLOCK"], },]
和这样的一个类:
public class AlertRoad : BaseAlert { [JsonProperty("agencyId")] [JsonConverter(typeof(StringEnumConverter))] public AgencyType AgencyId { get; set; } [JsonProperty("changeTypes")] [JsonConverter(typeof(StringEnumConverter))] public ChangeType[] ChangeTypes { get; set; } [JsonProperty("road")] public Road RoadInfo { get; set; } }
AgencyType是枚举,AgencyId的反序列化和序列化有效。
ChangeType是另一个枚举,但ChangeTypes的反序列化和序列化不起作用。 我假设原因是ChangeTypes是一个枚举值数组。
问题是:如何反序列化/序列化ChangeTypes字段,或者通常是枚举值数组?
我尝试定义自己的字段转换器,名为ChangeTypeConverter,并将StrinEnumConverter更改为ChangeTypeConverter for ChangeTypes字段,但在ReadJson函数中,reader的值为null。
public class ChangeTypeConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var val = reader.Value; //val is null?!? return val; } public override bool CanConvert(Type objectType) { return objectType == typeof(ChangeType); } }
StringEnumConverter
只需要一个枚举值。 由于ChangeTypes
是一个数组,因此您需要对该属性进行一些不同的注释以使其工作。
试试这个:
上述就是C#学习教程:如何使用Json.Net反序列化枚举数组?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[JsonProperty("changeTypes", ItemConverterType=typeof(StringEnumConverter))] public ChangeType[] ChangeTypes { get; set; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1007346.html