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

我在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" } ] 

刚回到这个问题。 如果有人想知道:结果我最近不得不使用的Xamarin Live Player与Json.NET有一些问题。 ( https://developer.xamarin.com/guides/cross-platform/live/limitations/

我知道它必须是愚蠢的……好吧,也许我可以节省一些时间!

非常感谢到目前为止的所有回复! 可悲的是,他们都没有为我工作。

经过大量的反复试验后,我发现我能够像这样访问我的数据:

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

但如果我不得不以这种方式实现我的整个API,那将是一种绝对的痛苦……你们还有其他想法吗?

将iOS Build Linker行为设置为“仅限Link Framework SDK”为我解决了这个问题。

正如TJPurtell.1752在引用的xamarin线程中所描述的那样,Xamarin链接器将删除未使用的类型,方法和字段。

Link Framework SDK仅阻止我的应用程序类发生这种情况,这在我的conmtext中很好。

请尝试这样:

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

是的,这是一种难看的修复,但如果它正在工作,它正在工作:)

基于返回的JSON,需要将其解析为例如对象映射的数组

 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 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(json);