PODIO JSON Feed到C#对象多态性



我正在编写一个程序,从Podio中读取JSON字符串,然后将内容转换为c#对象。

但在阅读提要时,我发现了一种奇怪的格式;在对象的同一层次结构级别上,字段[value]的值有时是字符串,但有时是复杂对象。

示例如下。

在某些地方,它就像

"values":[
{
"value":"Bug on User Interface, Ajax sometimes does not load properly"
}
],
"type":"text"

然后在下一个项目,在层次结构的同一级别,它就像

"values":[
{
"value":{
"perma_link":"https://ds-test.podio.com/myworkspace/files/23529948",
"mimetype":"image/jpeg",
"hosted_by":"podio",
"name":"217820_274164679355286_689330144_n.jpg",
"hosted_by_humanized_name":"Podio",
"description":null,
"thumbnail_link":"https://files.podio.com/23529948",
"link":"https://files.podio.com/23529948",
"file_id":23529948,
"size":39698
}
}
],
"type":"image"

请注意"type"的值:对于第一个实例,它是"text",对于下一个实例,则是"image"。由于它们在层次结构的同一级别,我不知道如何为它们设计对象,以便DataContractJsonSerializer.Read方法能够顺利工作。

问候,

在前面,我不是JSON专家(我曾涉猎过),虽然我是一名称职的C#.net程序员,但我从未使用过JSON。NET。我本以为你现在至少会有一个好的、明确的答案,但由于你还没有任何,我会提供我价值0.02美元的东西,以防对你有帮助。

根据http://www.json.org.(我不确定你说这是一种"奇怪的格式",是在说你认为它无效,还是只是认为它不寻常)。

在您描述的两个示例中,它们之间都有一个一致的模式:

<string1> : <value1>,
<string2> : <value2>

在所有情况下:

  • CCD_ 2
  • CCD_ 3
  • <value1> == [ <object> ](即<value1>始终是包含单个<object>的阵列),以及
  • <value2> == "a string describing the structure of the <object>"

此外,当<value2> == "text"时,<object>是一个字符串,或者当<value2> != "text"时,它是一个更复杂的对象,在逗号分隔的列表中包含1个或多个<string> : <value>对。

那么,如何解析,假设。Net无法开箱即用地处理这种标准格式(我很惊讶它不能)。。。

  • 只为中的每个对象构建一个类定义。您应该能够从JSON中收集所需的结构。

  • 你有没有想过运行一个字符串操作来"查找/提取"你感兴趣的类型,并为每个类型设置一个显式的DataContractJsonSerializer(Type)

  • 否则,通常情况下,当<value2> != "text"时,您应该能够将<object>中的所有内容视为Dictionary<string,string>,然后根据在<value2>中指定的类型,根据需要逐个处理(甚至可以"手动"将其转换为对象)。


此外,我注意到了这一点。NET 4.5引入了这种过载:

DataContractJsonSerializer构造函数(类型,DataContractJson Serializer设置)

设置如下:

  • DataContractJsonSerializerSettings。UseSimpleDictionaryFormat,

  • DataContractJsonSerializer设置。DataContractSurrogate。

特别有趣的是:

  • DataContractJsonSerializerSettings。已知类型

。。。使用此实例DataContractJsonSerializerSettings序列化的对象图中可能存在的类型的集合。

这些可能是相关的,但我找不到任何关于这些设置的更多信息——也许是你可以尝试的。

相关内容

  • 没有找到相关文章

最新更新