这是json:
{
"odata.metadata": ".....",
"value": [
{
"AbsEntry": 10,
"ItemNo": "....",
"UoMEntry": -1,
"Barcode": "2000000000022",
"FreeText": "Ean13"
}
]
}
这是课程:
public class BarCode
{
public int AbsEntry { get; set; }
public string ItemNo { get; set; }
public string Barcode { get; set; }
public string FreeText { get; set; }
}
此方法返回null
:
BarCode barcode = JsonParser.DeserializeObjcet<BarCode>(json);
是否有任何属性或其他可能导致调用DeserializeObject
仅将我的类的字段反序列化(名称正是Json的名称)?
答案 0 :(得分:3)
您缺少根对象:
public class RootObject
{
public string __invalid_name__odata.metadata { get; set; }
public List<BarCode> value { get; set; }
}
请注意,无效名称oprperty可以删除,因此它将被激活!
即使您只需要Value部分,您也必须从根目录进行反序列化,然后导航到您需要的子属性。
答案 1 :(得分:3)
您需要创建类似下面的类而不是BarCode
public class Value
{
public int AbsEntry { get; set; }
public string ItemNo { get; set; }
public int UoMEntry { get; set; }
public string Barcode { get; set; }
public string FreeText { get; set; }
}
或者您可以更改JSON格式
"BarCode": [
{
"AbsEntry": 10,
"ItemNo": "....",
"UoMEntry": -1,
"Barcode": "2000000000022",
"FreeText": "Ean13"
}
]
答案 2 :(得分:3)
如果希望反序列化成功,则类的结构应与JSON的结构匹配。
如果您想要部分反序列化,例如只有将values
属性反序列化到您的类中,您才能使用此代码:
JObject jObject = JObject.Parse(json);
BarCode barcode = jObject["values"].Children().First().ToObject<BarCode>();
使用此解决方案,您无需重构您的课程或添加新课程。