在此讲座中有关JSON模式的讲座中,我们可以验证JSON数组对特定索引具有特定类型(在那里称为元组)。例如,街道地址的元组:
[NUMBER, STREET_NAME, STREET_TYPE, DIRECTION] // Structure
[1600, "Pennsylvania", "Avenue", "NW"] // Example
其中(固定长度)阵列中的不同项目的平均值:
- (int)编号:地址号。
- (string) street_name :街道的名称。
- (枚举) street_type :街道的类型。可以是
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
}
是否有属性可以定义每个属性的顺序索引或使用e.g的属性。整个型号的ArrayConverter
?好吧,我们只能使用 JArray
um和从索引中分配每个属性,但这并不是很顺畅。
这就是我将如何设置您的数据类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
}
这应该足以解析您的数据。