【问题标题】:Xamarin.Forms: JsonConvert.DeserializeObject allways returns null [duplicate]Xamarin.Forms:JsonConvert.DeserializeObject 总是返回 null [重复]
【发布时间】: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 XamarinFormsNewtonsoft.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


【解决方案1】:

但是JsonConvert.DeserializeObject() 总是返回null。

你的代码没有问题。通常这会返回一个 json 数组对象。

如果直接勾选myProducts,那么它是一个数组对象,需要指定数组中的哪个元素,哪个属性可以得到Rendered

由于你的 json 数组只包含一个对象,所以 Rendered 可以这样写:

myProducts[0].MyGuid.Rendered

然后这将返回:

http://test.de/?p=1

所有参数获取如下:

myProducts//------ System.Collections.Generic.List`1[App1.Views.MainPage+Product]
myProducts[0].Id //------1
myProducts[0].Date//------2016-05-10T03:48:21
myProducts[0].Date_gmt//------2016-05-10T03:48:21
myProducts[0].Modified//------2019-02-27T11:56:21
myProducts[0].MyGuid.Rendered//------http://test.de/?p=1

如果也有问题,可以分享解决方法的链接,我会查的。

【讨论】:

  • 在“普通”Visual Studio 项目(WPF、控制台等)中,代码运行良好。我觉得问题其实出在xamarin live player结合json.NET.
  • @insum 是的,可能是这个原因。您可以分享有关示例项目的链接。
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2016-11-02
相关资源
最近更新 更多