2016-08-05 3 views
0

jsonオブジェクトを任意のキーでバインドできる有用なモデルは何ですか?JSONモデルと可変キーのバインド.net mvc4

{"@@hello": "address","#world": "address1","name": "address"} 

または

{"@@hello": "address","#world": "address1","firstname": "foo", "lastname":"bar"} 

または

{"@@hello": "address","#world": "address1","children": [{"name":"foo"},{"name":"bar"}]} 

だから、あなただけのJSONモデルがどのように見えるか、実行時に知っている意味:あなたのJSONがどのように見える可能性が想定しています。私の現在の状態は、jsonオブジェクトをコントローラに文字列として送信し、json文字列をオブジェクトに逆シリアル化することがベストプラクティスであると思われることです。

public ActionResult mappingNodes(string model) { 
      dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(model); 
} 
+0

あなたは '辞書<文字列、オブジェクト>'を使用できますか?明らかにモデルを持つほどうまくはないですが、プロパティをモデルにマップしてみるのはかなり難しいと思います。 – Matthew

+0

@Matthewそれは可能ですが、 'Newtonsoft.Json.JsonConvert.DeserializeObject'の代わりにDictionaryを使用して利点を見ることはできません。 – StellaMaris

+0

プロパティをバインドする方法を決定するために、独自のコントラントリゾルバを記述することもできます。http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Serialization_DefaultContractResolver.htm – Matthew

答えて

1
public class Children 
    { 
     [JsonProperty("name")] 
     public string Name { get; set; } 
    } 
    public class YourClass 
    { 
     [JsonProperty("@@hello")] 
     public string Hello { get; set; } 
     [JsonProperty("#world")] 
     public string World { get; set; } 
     [JsonProperty("name")] 
     public string Name { get; set; } 
     [JsonProperty("firstname")] 
     public string FirstName { get; set; } 
     [JsonProperty("lastname")] 
     public string LastName { get; set; } 
     [JsonProperty("children")] 
     public Children[] Children { get; set; } 
    } 



     var json1 = "{ '@@hello': 'address','#world': 'address1','name': 'address'}"; 
     var json2 = "{ '@@hello': 'address','#world': 'address1','name': 'address', 'firstname': 'foo', 'lastname':'bar'}"; 
     var json3 = "{ '@@hello': 'address','#world': 'address1','name': 'address','children': [{'name':'foo'},{'name':'bar'}]}"; 


     var model1 = JsonConvert.DeserializeObject<YourClass>(json1); 
     var model2 = JsonConvert.DeserializeObject<YourClass>(json2); 
     var model3 = JsonConvert.DeserializeObject<YourClass>(json3); 
+0

これは、私のjsonの例の1つで、あなたのためには機能しませんあなたのモデルを毎回変更する必要があります。 – StellaMaris

+0

それはやるべき方法の小さなバージョンでしたが、今はフルバージョンです。多分あなたがリフレクションや他のテクニカルを使用する必要がある場合は、より動的な必要がある場合。ありがとう –

+0

あなたの解決策では、私の提案との違いを「オブジェクトをシリアライズする」ことができません。 – StellaMaris

関連する問題