我正在尝试编写一个通用模式来反序列化我的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数组字符串。
但是重新编写这段代码,我得到了例外
无法将JSON数组(例如[1,2,3])反序列化为类型''因为类型需要JSON对象(例如{“name”:“value”})才能正确反序列化
如何解决此错误?
答案 0 :(得分:2)
我不太清楚,但是,你有没有错过你名单的父容器?
我与您分享了一个用于对数据进行反序列化的代码
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; }
}
}
答案 1 :(得分: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;