Newtonsoft.Json在Xamarin的iOS项目反序列化对象Newtonsoft.Json

2019-05-12 10:59发布

我得到我的Xamarin.Forms项目一些非常怪异的行为。

我从REST API获取一些序列化的数据。 然后我试图使用Json.NET反序列化的对象。

这工作完全正常在Android上,如果我的代码复制到.NET控制台应用程序也适用。 然而,在我的iOS项目,调用.DeserializeObject()刚刚返回null。 它不会引发错误或以任何方式抱怨。

我发现这个讨论: https://forums.xamarin.com/discussion/15152/deserialization-not-working-with-json-net-on-ios-device-ios-simulator-works ,但我并没有链接摆在首位,并试图通过设置建议TJPurtell.1752属性的所有组件没有帮助。

谁能告诉我在这里做什么?

非常感谢!

一月

编辑

下面是我想要反序列化样本响应:

[
   {
      "Isbn":{
         "Isbn10":"0099910101",
         "Isbn13":"9780099910107"
      },
      "Title":"A Farewell to Arms",
      "Authors":[
         "Ernest Hemingway"
      ],
      "Publisher":"Random House",
      "ReleaseDate":"1994",
      "PageCount":293,
      "Description":"In 1918 Ernest Hemingway went to war, to the 'war to end all wars'. He volunteered for ambulance service in Italy, was wounded and twice decorated. Out of his experiences came A Farewell to Arms. Hemingway's description of war is unforgettable. He recreates the fear, the comradeship, the courage of his young American volunteer and the men and women he meets in Italy with total conviction. But A Farewell to Arms is not only a novel of war. In it Hemingway has also created a love story of immense drama and uncompromising passion.",
      "ThumbnailUrl":"http://books.google.com/books/content?id=m68LhBiNv8YC&printsec=frontcover&img=1&zoom=1&source=gbs_api"
   },
   {
      "Isbn":{
         "Isbn10":"9044538780",
         "Isbn13":"9789044538786"
      },
      "Title":"Het huis van de namen",
      "Authors":[
         "Colm Tóibín"
      ],
      "Publisher":"Singel Uitgeverijen",
      "ReleaseDate":"2017-08-24",
      "PageCount":0,
      "Description":"Klytaimnestra heeft veel moeten doorstaan. Haar man heeft haar kind, haar mooie oudste dochter, geofferd aan de goden, en zij heeft hem niet kunnen tegenhouden. Hoe kan ze dit ooit te boven komen? En hoe zullen haar andere twee kinderen reageren op deze ontwrichtende gebeurtenis? Eén ding neemt ze zich voor: haar man zal dit met de dood moeten bekopen.",
      "ThumbnailUrl":"http://books.google.com/books/content?id=yl8yDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
   }
]

Answer 1:

刚回到这个问题。 如果任何人的疑惑:原来,Xamarin在场玩家我最近不得不用牙齿有问题Json.NET。 ( https://developer.xamarin.com/guides/cross-platform/live/limitations/ )

我知道它是什么傻事......好吧,也许我能救别人一些时间!



Answer 2:

设置的iOS建立链接器行为“连架构的SDK只”固定这对我来说。

如TJPurtell.1752在引用xamarin线程描述中,链接器Xamarin将去掉未使用的类型,方法和字段。

链接框架的SDK只防止发生对我的应用程序类,这是很好的,我conmtext。



Answer 3:

非常感谢到目前为止所有的答复! 遗憾的是他们没有为我工作。

大量的试验和错误,我发现我能够访问像这样我的数据后:

var blub = JsonConvert.DeserializeObject(booksString);
foreach (var element in (JArray)blub)
{
    var blublub = ((JObject)element).SelectToken("$.Title").ToString();
}

但是,这将是一个绝对的痛苦,如果我必须实现我的整个API这样......有没有从你们任何其他的想法?



Answer 4:

请尝试这样的:

Item item = JObject.Parse (json).ToObject<Item> ();

是的,它是一种丑陋的修复,但如果它的工作,它的工作:)



Answer 5:

基于所述JSON返回它需要被desrialized到一个阵列,其中对象映射例如

public class Isbn {
    public string Isbn10 { get; set; }
    public string Isbn13 { get; set; }
}

public class Item {
    public Isbn Isbn { get; set; }
    public string Title { get; set; }
    public IList<string> Authors { get; set; }
    public string Publisher { get; set; }
    public string ReleaseDate { get; set; }
    public int PageCount { get; set; }
    public string Description { get; set; }
    public string ThumbnailUrl { get; set; }
}

然后,像反序列化

var items = JsonConvert.DeserializeObject<Item[]>(json);


文章来源: Newtonsoft.Json deserialize object in Xamarin iOS project