2016-05-10 17 views
-4

私は、これは、クエリ式を表すような再帰的なJSONオブジェクトを持っています。私は、いくつかのクラスにこのJSONをデシリアライズデータを更新して、後で戻ってJSONにシリアライズできるようにしたいと思いデシリアライズ再帰的なJSONオブジェクト

{ 
    "where": { 
    "operator": "OR", 
    "left": { 
     "operator": "=", 
     "$fieldRef": "id", 
     "value": "1234" 
    }, 
    "right": { 
     "operator": "OR", 
     "left": { 
     "operator": "=", 
     "$fieldRef": "orgId", 
     "value": "6757" 
     }, 
     "right": { 
     "operator": "AND", 
     "left": { 
      "operator": "STARTSWITH", 
      "$fieldRef": "firstname", 
      "value": "D" 
     }, 
     "right": { 
      "operator": "=", 
      "$fieldRef": "state", 
      "value": "Closed" 
     } 
     } 
    } 
    } 
} 

:ここでは、より複雑な例です。どうすればJson.NETを使ってこれを行うことができますか?

+3

何を試しましたか? JSONをシリアライズ/デシリアライズするためのほとんどの標準である 'json.net'で質問にタグ付けしました。多分それを使うのだろうか? – David

+0

mvvmパターンを使用してwpfアプリケーションを構築しようとしていますが、jsonファイルを再帰的に非直列化したいと考えています。 – Akis

+0

ここでは、Googleの "json .net deserialize"を使用します:http://www.newtonsoft.com/json /help/html/deserializeobject.htm(注:「再帰的に直列化解除」しないでください。)この構造体を保持できるオブジェクトに直列化解除するだけです。クラスを定義し、 'json.net'に1行のコードを使用します。そのクラスにJSON文字列を逆シリアル化してください。) – David

答えて

0

このようなクラスを定義します

JsonSerializerSettings settings = new JsonSerializerSettings 
{ 
    NullValueHandling = NullValueHandling.Ignore, 
    Formatting = Formatting.Indented 
}; 

json = JsonConvert.SerializeObject(q, settings); 

ここでは単純です:これは次のようにあなたが戻ってJSONにシリアライズすることができます

Query q = JsonConvert.DeserializeObject<Query>(json); 

class Query 
{ 
    [JsonProperty("where")] 
    public Clause Where { get; set; } 
} 

class Clause 
{ 
    [JsonProperty("operator")] 
    public string Operator { get; set; } 

    [JsonProperty("left")] 
    public Clause Left { get; set; } 

    [JsonProperty("right")] 
    public Clause Right { get; set; } 

    [JsonProperty("$fieldref")] 
    public string FieldRef { get; set; } 

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

次に、あなたはこのようにデシリアライズすることができますがデモ:https://dotnetfiddle.net/qqAj2v

+0

オハイオ州..役に立つと思われます...脳にありがとうございます – Akis

+0

それはうまくいきます... observeablecollectionsで再帰的データを収集する方法を教えてください。つまり、UIにバインドする必要があるClausesのリストが必要です。 – Akis

+0

コメントのスペースでは答えられません。私はそれについて新しい質問を開くことをお勧めします。その質問では、達成しようとしていること、これまで行ってきたこと(可能であればコードを含む)、あなたのアイデア、そして直面している問題について詳しく説明してください。コンテキストを提供する場合は、この質問にリンクすることができます。 –

関連する問題