rih*_*iha 7 c# serialization json xamarin.ios
Web上有各种各样的资源,解释了如何将一些C#对象序列化为JSON字符串.我无法让任何人使用MonoTouch 3.2.4.
我遇到的替代品:
System.Json命名空间
我已经成功使用System.Json命名空间来反序列化数据.因此,为了简单起见,我宁愿坚持这一点,如果可能的话.不幸的是,我不知道如何用它序列化(或者甚至可能).
System.Runtime.Serialization.Json.DataContractJsonSerializer
MonoTouch中没有System.Runtime.Serialization.Json命名空间.我在某处读到它是.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
Run Code Online (Sandbox Code Playgroud)
这是一个索引的例子:
this.StringValue = value[0];
this.IntValue = value[1];
Run Code Online (Sandbox Code Playgroud)
一个我的名字:
this.StringValue = value["StringValue"];
this.IntValue = value["IntValue"];
Run Code Online (Sandbox Code Playgroud)
当这是命名的StringValue字符串属性并命名INTVALUE一个int属性的类.在大多数情况下,JsonValue类将隐式转换为您的类型.
所以我所做的是创建一个类以强类型方式保存所有Json信息,然后在构造函数中传入JsonValue来执行丑陋的弱类型化的东西.
对于其他库,您将遇到问题,其中MonoTouch剥离了在通过反射创建时被视为"未使用"的类型(例如,当您使用XmlSerializer时).我发现自己在不必要的情况下解决这个问题,不得不在类型上添加PreserveAttribute等.
有关此问题,请阅读此处以获取有关Preserve:MonoTouch Doc的更多信息
归档时间: |
|
查看次数: |
6500 次 |
最近记录: |