【问题标题】:How to deserialize an JSON object with an array, without knowing the types of objects in that array如何在不知道该数组中对象类型的情况下使用数组反序列化 JSON 对象
【发布时间】:2011-11-10 08:50:28
【问题描述】:

我正在为 Windows Phone 7 构建一个 Foursquare 应用程序。它与 HttpWebRequests 配合得很好,并且我可以完美地接收 JSON 对象。我正在使用 DataContractJsonSerializer(type) 方法。但是当将此 JSON 反序列化为我想要的对象时,一切都很顺利,直到我有对象数组,我不知道期望哪种对象类型(也不知道对象的数量和顺序)。但是我在DataContractJsonSerializer(type)方法中反序列化的时候确实需要定义这个类型。

让我向您展示导致问题的 JSON 快照:

notifications":
[{
    "type":"notificationTray",
    "item":{
        "unreadCount":0
    }
},{
    "type":"message",
    "item":{
        "message":"OK! We've got you @ Strandslag 4. You've been here 2 times."
    }
}]

所以我将它反序列化为一个 Notification 对象数组,有两个 memer:“public String type”和一个“public Object item”。我不知道数组中会有哪些通知以及有多少通知(因此“项目”成员必须是什么类型)。正如您在 JSON 中看到的,第一个通知具有 int 类型的项目,但第二个通知的项目是字符串类型。但是我需要知道反序列化...否则它只是保持为空..所以我不能将它转换为正确的类型..

有谁知道如何很好地解决这个问题?

【问题讨论】:

  • 查看此处了解有关 4th & Mayor(另一个 Foursquare 应用程序)的建设信息。对你有帮助:jeff.wilcox.name/2011/03/4am-leaderboard-notification
  • 感谢 Ku6opr!这肯定是我的问题的一个选择。需要将我的应用程序从标准的反序列化方法重建到示例中使用的库。我要试试!再次感谢!

标签: c# json windows-phone-7


【解决方案1】:

嗯,不是 100% 肯定这会回答您的问题,但您能否不使用 javascript 将任何对象转换为字符串,然后以这种方式操作它?

类似:

var value = 不管[number].toString;

这会给你一个你可以使用的字符串。然后,您可以尝试将其解析回 int。

var valueInt = parseInt(value);

然后使用IF语句查看valueInt是否存在来判断第一个对象有什么样的值。

【讨论】:

  • 这也可能是一个解决方案,但我将首先尝试专用于 Windows Phone 的 JSON.net 库。我个人认为这会给我一些更干净的代码。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多