使用ORDINAL索引对JSON元组进行对象



在此讲座中有关JSON模式的讲座中,我们可以验证JSON数组对特定索引具有特定类型(在那里称为元组)。例如,街道地址的元组:

[NUMBER, STREET_NAME, STREET_TYPE, DIRECTION] // Structure
[1600, "Pennsylvania", "Avenue", "NW"] // Example

其中(固定长度)阵列中的不同项目的平均值:

  • (int)编号:地址号。
  • (string) street_name :街道的名称。
  • (枚举) street_type :街道的类型。可以是StreetAvenueBoulevard
  • (枚举)方向:地址的城市象限。可以是NWNESWSE

使用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
}

这应该足以解析您的数据。

相关内容

  • 没有找到相关文章

最新更新