2016-08-03 10 views
-1

のオブジェクトを作成します。私は私のデバイスクラスと同じ構造を持つJSONが含まれているjオブジェクトを持っている動的オブジェクトから

public class Entry 
    { 
     public string key { get; set; } 
     public object value { get; set; } 
    } 

    public class Detail 
    { 
     public List<Entry> entry { get; set; } 
    } 


    public class Device 
    { 
     public List<Detail> details { get; set; } 
    } 

私はJSONは、動的保存:

dynamic d = JsonConvert.DeserializeObject(json); 

私が作成したいですデバイスオブジェクトを動的オブジェクトから削除します。

new Device { details = d.details } 

詳細は次の内容を含むリストですリストを作成し、リストをコンストラクタで作成する必要がありますが、私はこれを行う方法を理解することはできません。みたいなものだろうか?

new Device { details = new List<Detail> (entry = new List<Entry>(some list from d?))}} 

私に助言してください。

EDIT:

JSONと私のオブジェクトは、同じ構造を共有しません。それは、部分的にありませんので、私は単にしばらくのJSONを変換することはできません。

+0

エントリとして直接デシリアライズしないのはなぜですか? var entry = JsonConvert.DeserializeObjectを使用してください(string json); – bedane

+0

これはまったく同じではなく、類似点を共有しています。実際のオブジェクトを作成する際に問題となっているのはこの詳細プロパティです。 オブジェクトにはほぼ1000のプロパティがあるので、ここにすべてを投稿することはできません。 –

+0

なぜあなたは '動的'を使用していますか?それが具体的なものであれば、完全なオブジェクトを脱直列化します。両方に 'List 'が含まれている場合は、あるプロパティの値を別のプロパティに割り当てるだけです。 – Sinatr

答えて

1

JSONの構造がDeviceの場合と全く同じ場合は、JsonConvert.DeserializeObject<Device>(jsonString)になります。

元のJSONにプロパティがいくつか追加されていても、クラスのプロパティ名が同じで、配列の配列は何かなどであれば動作するはずです。

サンプル:

public class Entry 
    { 
     public string key { get; set; } 
     public object value { get; set; } 
    } 

    public class Detail 
    { 
     public List<Entry> entry { get; set; } 
    } 


    public class Device 
    { 
     public List<Detail> details { get; set; } 
    } 

void Main() 
{ 
    var json = @" 
    { 
     ""irrelevant"": ""fnord"", 
     ""also_irrelevant"": [1,3,5,7], 
     ""details"": [ 
     { 
     ""not_entry"": true, 
     ""entry"": [ 
      { 
      ""key"": ""x"", 
      ""value"": ""1"" 
      }, 
      { 
      ""key"": ""y"", 
      ""value"": ""2"" 
      } 
     ] 
     }, 
     { 
     ""entry"": [ 
      { 
      ""key"": ""a"", 
      ""value"": ""3"", 
      ""bummer"": ""hello"" 
      }, 
      { 
      ""key"": ""b"", 
      ""value"": ""4"", 
      ""bummer"": ""hello"" 
      } 
     ] 
     } 
     ] 
    }"; 

    Newtonsoft.Json.JsonConvert.DeserializeObject<Device>(json).Dump(); 
} 

これはして詳細クラス(2個のエントリ)、エントリクラス(2つのエントリ毎)のリストとそれぞれのリストが得られたデバイスクラスを示す、LINQPadに私のためにうまく実行されkvpのセット。

可能であれば、私はこのルートに行きます。なんらかの理由でプロパティの名前が付けられておらず、変更できない場合は、常に[JsonProperty("actual_json_name")]を使用してプロパティを上書きできます。

+0

それはまったく同じではない、それは類似点を共有している、私は実際のオブジェクトを作成するときに問題があるこの詳細プロパティです。 オブジェクトにはほぼ1000のプロパティがあるので、ここにすべてを投稿することはできません。 –

関連する問題