2016-08-22 4 views
1

Ich versuche ein generisches Muster zu schreiben, um meine JSON-Array-Zeichenfolge zu deserialisieren. Ich habe folgendes Objekt unten erstellt:Generisches Muster: Das JSON-Array kann nicht deserialisiert werden

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; } 
} 

Mein json-Format

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

Jetzt kann ich dieses Muster wie das

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

wo Ergebnis

verwenden wird der JSON-Array-String .

Aber ruuning diesen Code, ich erhielt die Ausnahme unten

Kann das JSON-Array deserialisieren (zB [1,2,3]) in den Typ '', weil Typ erfordert JSON-Objekt (zB { „name“ : "Value"}) um korrekt zu deserialisieren

Wie kann dieser Fehler behoben werden?

Antwort

2

Ich bin mir nicht sicher, ob Sie das verstehen, aber haben Sie den übergeordneten Container Ihrer Liste nicht verpasst?

Ich teile Ihnen einen Code, um Ihre Daten zeigen an 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

Die Fehlermeldung, dass es keine passenden Klasse für den values Teil Ihrer json Daten vorhanden sind. Sie müssen die Struktur Ihres json ändern oder Sie einen anderen (root) Klasse hinzufügen:

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; } 
} 

Dann Sie Ihre Daten wie folgt zu erreichen:

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

myData null ist. – Jmocke

Verwandte Themen