繁体   English   中英

使用MonoTouch进行JSON反序列化

[英]JSON de-serialization with MonoTouch

Web上有各种各样的资源,解释了如何将一些C#对象序列化为JSON字符串。 我无法让任何人使用MonoTouch 3.2.4

我遇到的替代品:

  • System.Json命名空间
    我已经成功使用System.Json命名空间来反序列化数据。 因此,为了简单起见,我宁愿坚持这一点,如果可能的话。 不幸的是,我不知道如何用它序列化(或者甚至可能)。

  • System.Runtime.Serialization.Json.DataContractJsonSerializer
    System.Runtime.Serialization.Json命名空间在MonoTouch中不可用。 我在某处读到它是.NET 3.5的一部分,而且MonoTouch处于.NET 2.0级别。 这可能解释了它。

  • System.Web.Script.Serialization.JavaScriptSerializer
    MonoTouch中也缺少这个(事实上,似乎只有System.Web.Services可用)。

  • James Newton-King的Json.NET
    我设法通过包含.NET 2.0程序集dll并使用Newtonsoft.Json.JsonConvert.SerializeObject()使这个工作在模拟器上工作。 但是,这不会为设备编译,错误“ mtouch失败,没有输出 ”。 一旦我删除了程序集引用,它就会很好地编译。

有没有办法让其中一个与MonoTouch一起工作? 还有其他尝试吗?

谢谢

我建议使用System.Json库,它不是很难使用,并且在类中包装以使其强类型化。 它也作为MonoTouch的默认程序集包含在内,因为它继承自Silverlight。

加载它:

JsonValue value = JsonObject.Load(stream); //There are other overloads here, my stream is off an HttpWebRequest

这是一个索引的例子:

this.StringValue = value[0];
this.IntValue = value[1];

一个我的名字:

this.StringValue = value["StringValue"];
this.IntValue = value["IntValue"];

是一个具有名为StringValue的字符串属性和名为IntValue的int属性的类。 在大多数情况下,JsonValue类将隐式转换为您的类型。

所以我所做的是创建一个类以强类型方式保存所有Json信息,然后在构造函数中传入JsonValue来执行丑陋的弱类型化的东西。

对于其他库,您将遇到问题,其中MonoTouch剥离了在通过反射创建时被视为“未使用”的类型(例如,当您使用XmlSerializer时)。 我发现自己在不必要的情况下解决这个问题,不得不在类型上添加PreserveAttribute等。

有关此问题,请阅读此处以获取有关Preserve: MonoTouch Doc的更多信息

我没有街头信誉,所以我不能对上面的答案发表评论。

只是想在使用System.Json.JsonObject.ToString()方法时发布警告。 我正在使用它,它似乎生成JSON很好..然后我有一个返回(\\ n)的字符串。 它没有正确地逃脱,它最终产生了不好的JSON ..

所以,如果你有简单的JSON,它可能工作正常,但如果你知道你的字符串中可能有特殊字符需要转义,你应该首先测试“ToString()”方法。

我认为newtonsoft JSON库看起来像一个替代品。 在Xamarin的网站上有关于此的信息:

https://components.xamarin.com/view/json.net

意识到这是一个可怕的答案,但只是想将警告发布给系统json lib的用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM