【发布时间】:2019-08-05 21:11:31
【问题描述】:
我尝试使用Newtonsoft.Json 将 json 字符串反序列化为对象。但是JsonConvert.DeserializeObject() 总是返回null。
string json2 = "[{ 'id':1,'date':'2016-05-10T03:48:21','date_gmt':'2016-05-10T03:48:21','guid':{ 'rendered':'http://test.de/?p=1'},'modified':'2019-02-27T11:56:21'}]";
List<Product> myProducts = new List<Product>();
myProducts = JsonConvert.DeserializeObject<List<Product>>(json2); // allways null!?
我猜原因在于课程MyGuid。永远无法到达属性Rendered 的设置器。
我已在此处阅读有关此主题的所有问题,但没有找到我问题的正确答案。
这是整个代码示例:
namespace JsonToObject
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
string json2 = "[{ 'id':1,'date':'2016-05-10T03:48:21','date_gmt':'2016-05-10T03:48:21','guid':{ 'rendered':'http://test.de/?p=1'},'modified':'2019-02-27T11:56:21'}]";
List<Product> myProducts = new List<Product>();
myProducts = JsonConvert.DeserializeObject<List<Product>>(json2); // allways null!
}
}
public class Product
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("date")]
public string Date { get; set; }
[JsonProperty("date_gmt")]
public string Date_gmt { get; set; }
[JsonProperty("guid")]
public MyGuid MyGuid { get; set; }
[JsonProperty("modified")]
public string Modified { get; set; }
}
public class MyGuid
{
[JsonProperty("rendered")]
public string Rendered { get; set; } // not reached!
}
}
谁能帮帮我?
【问题讨论】:
-
首先,单引号在 JSON 中不是有效的分隔符,虽然我不知道 json.net 是否严格执行。
-
您的代码对我来说运行良好。我设法反序列化一个 Product 对象,其所有属性都不为空。我建议尝试另一条路线。使用相应的属性创建一个 Product 实例,尝试对其进行序列化并将结果与您的初始 JSON 字符串进行比较。祝你好运
-
您在使用 xamarin 实时播放器吗?如果是这样,Json.NET 序列化程序显然在那里不起作用,请参阅 JsonConvert.SerializeObject always return {} in XamarinForms 和 Newtonsoft.Json deserialize object in Xamarin iOS project。
-
你的代码没有问题。如果你直接查看myProducts,那么它是一个数组对象,你需要指定数组中的哪个元素,哪个属性可以得到Rendered。由于你的json数组只包含一个对象,得到渲染可以这样写:
myProducts[0].MyGuid.Rendered。然后这将返回:http://test.de/?p=1。 -
@dbc:感谢您的回答和链接。是的,我将 xamarin 实时播放器用于 Android 项目。在“正常”的 WPF 项目中,代码可以正常工作。
标签: c# xamarin.forms json.net xamarin-live-player