2017-11-20 17 views
1

jsonをc#オブジェクトに変換するのに苦労しています。私のようなJSONを作成することができるよ。この構造によりJSONをc#オブジェクトに逆シリアル化する

enter image description here

私のJSONは(typescriptですで)他のアプリによって生成されるが、ここで私のJSONを生成するために使用されるオブジェクトの構造であります:

{ 
    EQNode: { key: "userid", value: 5} 
} 

以上COMPLEXE:

{ 
    AndNode: [ 
     { 
      EQNode: { key: "userid", value: 5 } 
     }, 
     { 
      LikeNode: { key: "username", value: "foo" } 
     } 
    ] 
} 

あるいはそれ以上COMPLEXE:

public class EQNode 
{ 
    [JsonProperty("key")] 
    public string key { get; set; } 

    [JsonProperty("value")] 
    public int value { get; set; } 
} 

public class LikeNode 
{ 
    [JsonProperty("key")] 
    public string key { get; set; } 

    [JsonProperty("value")] 
    public string value { get; set; } 
} 

public class GTNode 
{ 
    [JsonProperty("key")] 
    public string key { get; set; } 

    [JsonProperty("value")] 
    public int value { get; set; } 
} 

public class LTNode 
{ 
    [JsonProperty("key")] 
    public string key { get; set; } 

    [JsonProperty("value")] 
    public int value { get; set; } 
} 

public class OrNode 
{ 
    [JsonProperty("EQNode")] 
    public EQNode EQ { get; set; } 
} 

public class AndNode 
{ 
    [JsonProperty("EQNode")] 
    public EQNode EQ { get; set; } 

    [JsonProperty("LikeNode")] 
    public LikeNode LIKE { get; set; } 

    [JsonProperty("GTNode")] 
    public GTNode GT { get; set; } 

    [JsonProperty("LTNode")] 
    public LTNode LT { get; set; } 

    [JsonProperty("OrNode")] 
    public List<OrNode> OR { get; set; } 

    [JsonProperty("AndNode")] 
    public List<OrNode> And { get; set; } 
} 

public class RootObject 
{ 
    [JsonProperty("AndNode")] 
    public List<AndNode> And { get; set; } 

    [JsonProperty("OrNode")] 
    public List<OrNode> OR { get; set; } 

    [JsonProperty("EQNode")] 
    public EQNode EQ { get; set; } 

    [JsonProperty("LikeNode")] 
    public LikeNode LIKE { get; set; } 

    [JsonProperty("GTNode")] 
    public GTNode GT { get; set; } 

    [JsonProperty("LTNode")] 
    public LTNode LT { get; set; } 
} 

をしかし、これは私に "ハードコード" を少し思わ:

{ 
    AndNode: [ 
     { 
      EQNode: { key: "userid", value: 5 } 
     }, 
     { 
      OrNode: [ 
       { 
        LikeNode: { key: "username", value: "foo" } 
       }, 
       { 
        LikeNode: { key: "email", value: "[email protected]" } 
       }, 
      ] 
     } 
    ] 
} 

I'haveは、このモデルを使用して、私のJSONを解析するために管理しました。私のモデルに素敵なモデル構造を持たせる方法はありますか?

+1

すべての構造が同じである4つの異なるノードクラスがある理由はわかりません。それは単なるUnaryNodeではありませんか? (私はまた、あなたのプロパティの.NET命名規則に従うことを強くお勧めします) –

+0

私の答えをチェックし、Visual Studioの助けを借りてください..詳細はjsonの構造の理解の詳細に行く必要はありません、Visual Studioはあなたのために働く –

+0

あなたが知っているように、あなたのような属性括弧内のJSON名があれば、C#クラスとプロパティに任意の名前を付けることができます。 –

答えて

6

あなたと一緒にJsonをお持ちの場合は、Visual Studioを使用してC#クラスを生成できます。

ビジュアルスタジオで[ペーストセパラシ]を検索します。つまり、jsonの文字列をコピーして[特殊な形式で貼り付け]をクリックすると、C#クラスが生成されます。

あなたは私のポストに従うことができます:Generate Class From JSON or XML in Visual Studio

+0

TYこれについて私は決して知らなかった私はいつも[link] http://json2csharp.com/ –

+0

どうしましたか?これを知っています!? :D –

+0

@IainGalloway - ビジュアルスタジオのオンライントレーニングに参加することによって –

1

それはあなたが特定のJSONスキーマを決定した場合、本当に良くなるとの両方のアプリでそれを使用します。より詳細なJSONを使用すると、より良い洞察を得るのに役立ちます。

+0

あなたの答えをありがとう私は私のポストを更新します –

+0

混乱を避けるために、私はここで新鮮な、ダブル投稿を申し訳ありませんから始めました:https:// stackoverflow。com/questions/47394775/deserialize-json-c-sharp-with-variable-content?noredirect = 1#コメント81743134_47394775 –