2016-08-22 5 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 (например, { «имя» : «Значение»}) для десериализации правильно

Как cani исправить эту ошибку?

ответ

2

Я не уверен, что хорошо понимаю, но разве вы не пропустили родительский контейнер вашего списка?

делюсь вам код для 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

сообщение об ошибке указывает на то, что нет соответствующего класса для values части ваших данных json. Вы должны изменить структуру вашего 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 равна нулю. – Jmocke

Смежные вопросы