gpt4 book ai didi

c# - 使用 MonoTouch 进​​行 JSON 反序列化

转载 作者:太空狗 更新时间:2023-10-29 20:18:22 24 4
gpt4 key购买 nike

网络上有各种资源解释如何将某些 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 failed with no output”的设备进行编译。一旦我删除程序集引用,它就可以正常编译。

有没有办法让其中之一与 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"];

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

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

对于其他库,您会遇到 MonoTouch 去除在反射创建时被视为“未使用”的类型的问题(例如,当您使用 XmlSerializer 时)。我发现自己与这个问题的斗争超出了必要,不得不在类型上添加 PreserveAttribute 等。

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

关于c# - 使用 MonoTouch 进​​行 JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com