如何在MonoTouch中使用System.Json进行序列化

时间:2011-02-17 09:16:12

标签: c# json serialization xamarin.ios

我的other question似乎太通用了,所以我想我会在细节上创建一个新的。对不起,如果这被认为是不好的做法。

我正在尝试使用MonoTouch和System.Json命名空间将C#对象序列化为JSON字符串,其方式不需要我自己下载对象。那可能吗?如果是的话,如何正确地做到这一点?

通过将JsonValue隐式地转换为字符串,int,无论如何,反序列化都可以正常工作。此外,在层次结构中下降是没有问题的。像这样:

JsonValue json = JsonValue.Parse(jsonString);
int mainValue = json["mainValue"];

JsonValue subValues = json["subValues"];
int subValue1 = subValues["subValue1"];

相反的情况只适用于元素类型(string / int / ...)。遗憾的是,其他对象无法转换为JsonValue / JsonObject。只有两个整数,甚至不是非常简单的结构。

// This works
JsonValue json = new JsonObject(new KeyValuePair<string,JsonValue>("mainValue", 12345));

// Cannot (implicitly) convert type 'MyObjectType' to 'System.Json.JsonValue'
MyObjectType myObject = new MyObjectType();
JsonValue subValues = myObject;

// Cannot (implicitly) convert type 'MySimpleStruct' to 'System.Json.JsonObject'
MySimpleStruct myStruct;
myStruct.x = 1;
myStruct.y = 2;
JsonValue myStructJson = myStruct;

由于我的对象嵌套了几层其他对象,我自己遍历它并分配所有值将是一个伟大的PITA。 System.Json有一个更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

System.Json不支持这样的任意序列化。

您可以使用像Newtonsoft这样的第三方Json库,或者等待具有DataContractJsonSerializer的MonoTouch v4