2017-12-24 16 views
0

this lecture about Json Schemasでは、json配列が特定のインデックスに対して特定の型を持つことを検証できます(タプルと呼ばれます)。例えば、ストリートアドレスのタプル:jsonタプルを序数インデックスを使ってオブジェクトにデシリアライズする

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

この(固定長)配列内の異なる項目は意味ここ

  • (INT)NUMBER:アドレス番号。
  • (文字列)STREET_NAME:通りの名前です。
  • (enum)STREET_TYPE:通りの種類。 Street,AvenueまたはBoulevardにすることができます。
  • (enum)ディレクション:住所の都市象限。 NW,NE,SWまたはSEとすることができます。

Newtonsofts Json.Netを使用してそのような配列をデシリアライズする明確な方法はありますか?モデルは次のようになるはずです:

属性は、それぞれのプロパティまたは属性の序数インデックスを定義する属性があります。モデル全体のArrayConverter?さて、JArrayを使って、インデックスの各プロパティを割り当てることはできますが、それほど滑らかではありません。

答えて

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 
} 

これはに十分なはずあなたのデータを解析する。

+0

しかし、それでも、タプルはjson配列( '[...]')ではなく、jsonオブジェクト( '{...}')であることが必要です。また、プロパティ名を指定したオブジェクトにシリアル化します。 –

+0

私が必要とするのは、jsonのデータをプロパティ名が指定されていない配列(代わりに序数インデックス)で表現する方法ですが、オブジェクトモデルは指定されたプロパティ名を持ちます(序数インデックスを使用して直列化されます) –

+0

この変換は、最初の解析後に実行する方が適していると思います。あなたが希望する出力の具体的な例を私に与えたら、私は自分の答えを変えることができます、 –

関連する問題