2016-08-22 13 views
1

json配列文字列を逆シリアル化する汎用パターンを作成しようとしています。 私は、次のオブジェクトが怒鳴る作成しました:汎用パターン:JSON配列を逆シリアル化できません

public interface IDataResponse<T> where T: class 
{ 
    List<T> Data { get; set; } 
} 

public class DataResponse<T>: IDataResponse<T> where T: class 
{ 
    [JsonProperty("value")] 
    public List<T> Data { get; set; } 
} 

マイJSON形式は今

{ 
    "values":{ 
    "value":[ 
    { 
     "value_1":"aaaaaa", 
     "value_2":"aaaaaa", 
     "value_3":"aaaaaa" 
    }, 
    { 
     "value_1":"bbbbbb", 
     "value_2":"bbbbbb", 
     "value_3":"bbbbbb" 
    } 
    ] 
    } 
} 

私はその

var myData = JsonConvert.DeserializeObject<List<DataResponse<MyData>>>(result); 

結果のように、このパターンを使用することができますJSON配列の文字列がされ。

しかし、このコードをruuning、私は

怒鳴る例外が発生しました

JSON配列をデシリアライズすることはできません(例えば、[1,2,3])タイプはJSONオブジェクト(例:{「name」を必要とするため、タイプ '' に: "value"})正しくデシリアライズする

caniはどのようにこのエラーを解決しますか?

答えて

2

私はよく分かりませんが、あなたのリストの親コンテナを見逃していませんか?

私はあなたのエラーメッセージがあなたのjsonデータのvalues一部に該当するクラスが存在しないことを示し、あなたのデータをdesrializeするコード

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string result = @" 
{ 
    'values':{ 
    'value':[ 
    { 
     'value_1':'aaaaaa', 
     'value_2':'aaaaaa', 
     'value_3':'aaaaaa' 
    }, 
    { 
     'value_1':'bbbbbb', 
     'value_2':'bbbbbb', 
     'value_3':'bbbbbb' 
    } 
    ] 
    } 
}"; 

      var myData = JsonConvert.DeserializeObject<MyContent<MyData>>(result); 
     } 
    } 

    public class MyContent<T> where T : class 
    { 

     [JsonProperty("values")] 
     public DataResponse<T> Values { get; set; } 
    } 

    [Serializable] 
    public class MyData 
    { 
     public string value_1 { get; set; } 
     public string value_2 { get; set; } 
     public string value_3 { get; set; } 
    } 

    public interface IDataResponse<T> where T : class 
    { 
     List<T> Data { get; set; } 
    } 

    public class DataResponse<T> : IDataResponse<T> where T : class 
    { 
     [JsonProperty("value")] 
     public List<T> Data { get; set; } 
    } 
} 
0

を共有しています。あなたのjsonの構造を変更する必要があるか、別の(ルート)クラスを追加する必要があります:あなたはこのようなあなたのデータを取得することができます

public class DataRoot<T> where T : class 
{ 
    public DataResponse<T> Values { get; set;} 
} 

public interface IDataResponse<T> where T : class 
{ 
    List<T> Data { get; set; } 
} 

public class DataResponse<T> : IDataResponse<T> where T : class 
{ 
    [JsonProperty("value")] 
    public List<T> Data { get; set; } 
} 

を:

var myData = JsonConvert.DeserializeObject<DataRoot<MyData>>(result).Values; 
+0

MYDATAはnullです。 – Jmocke

関連する問題