在this lecture about Json Schemas中,我们可以验证json数组是否具有特定索引的特定类型(在那里称为元组)。例如街道地址的元组:
[NUMBER, STREET_NAME, STREET_TYPE, DIRECTION] // Structure
[1600, "Pennsylvania", "Avenue", "NW"] // Example
此(固定长度)数组中的不同项表示:
Street
,Avenue
或Boulevard
。NW
,NE
,SW
或SE
。使用Newtonsofts Json.Net对这种数组进行反序列化的简洁方法是什么?该模型应如下所示:
public class StreetAddress
{
public int Number { get; set; }
public string StreetName { get; set; }
public StreetType StreetType { get; set; }
public Direction Direction { get; set; }
}
public enum StreetType
{
Street,
Avenue,
Boulevard
}
public enum Direction
{
Nw,
Ne,
Sw,
Se
}
是否有属性来定义每个属性的序数索引或使用例如属性的属性整个模型ArrayConverter
?好吧,我们可以使用JArray
并从索引中分配每个属性,但这感觉不是很顺利。
答案 0 :(得分:0)
这就是我设置数据类StreetAddress
的方法:
public class StreetAddress
{
[JsonProperty(Order = 1)]
public Int32 Number { get; set; }
[JsonProperty(Order = 2)]
public String StreetName { get; set; }
[JsonProperty(Order = 3)]
[JsonConverter(typeof(StringEnumConverter))]
public StreetType StreetType { get; set; }
[JsonProperty(Order = 3)]
[JsonConverter(typeof(StringEnumConverter))]
public Direction Direction { get; set; }
}
然后,您必须使用StringEnumConverter
实现正确的枚举器转换类型:
[JsonConverter(typeof(StringEnumConverter))]
public enum StreetType
{
[EnumMember(Value = "Street")]
Street,
[EnumMember(Value = "Avenue")]
Avenue,
[EnumMember(Value = "Boulevard")]
Boulevard
}
[JsonConverter(typeof(StringEnumConverter))]
public enum Direction
{
[EnumMember(Value = "Nw")]
Nw,
[EnumMember(Value = "Ne")]
Ne,
[EnumMember(Value = "Sw")]
Sw,
[EnumMember(Value = "Se")]
Se
}
这足以解析您的数据。