ali*_*aib 5 .net c# json podio
我正在编写一个程序来从Podio读取JSON字符串,然后将内容转换为c#对象.
但在阅读饲料时,我遇到了一种奇怪的形式; 在对象的相同层次级别,有时字段[value]的值是字符串,但有时它是一个复杂的对象.
示例如下.
它在某些地方就像
"values":[
{
"value":"Bug on User Interface, Ajax sometimes does not load properly"
}
],
"type":"text"
Run Code Online (Sandbox Code Playgroud)
然后在下一个项目中,在层次结构中的同一级别,它就像
"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"
Run Code Online (Sandbox Code Playgroud)
注意"type"的值:对于第一个实例,它是"text",然后对于下一个实例,它是"image".因为它们位于层次结构的同一级别,所以我不知道如何为它们设计对象,以便DataContractJsonSerializer.Read方法顺利运行.
问候,
首先,我不是 JSON 专家(我已经涉足),虽然我是一名称职的 C#.net 程序员,但我从未使用过 .NET 中的 JSON。我本以为你现在至少已经有了一个好的、明确的答案,但由于你还没有任何答案,我将提供价值 0.02 美元的奖金,以防它对你有帮助。
根据http://www.json.org ,这是有效的格式。(我不确定说这是一种“奇怪的格式”,你是说你认为它无效,还是只是说你认为它不寻常)。
在您描述的两个示例案例中,它们之间存在一致的模式:
<string1> : <value1>,
<string2> : <value2>
Run Code Online (Sandbox Code Playgroud)
在所有情况下:
<string1> == "Values",<string2> == "type",<value1> == [ <object> ](即<value1>始终是包含单个 的数组<object>),并且<value2> == "a string describing the structure of the <object>"另外,<object>当 时 是一个字符串<value2> == "text",或者是一个更复杂的对象,其中包含以<string> : <value>逗号分隔的列表中的 1 个或多个对<value2> != "text"。
那么,假设 .Net 无法处理这种开箱即用的标准格式(我很惊讶它不能),如何解析...
仅为您感兴趣的每个对象构建一个类定义。您应该能够从 JSON 中收集所需的结构。
您是否考虑过运行字符串操作来“查找/提取”您感兴趣的类型,并DataContractJsonSerializer(Type)为每种类型设置显式的?
否则,更一般地,您应该能够将<object>when中的所有内容视为<value2> != "text"a Dictionary<string,string>,然后根据需要根据具体情况进行处理,具体取决于您指定的类型<value2>(甚至“手动”将它们转换为您的对象) 。
此外,我注意到 .NET 4.5 引入了这种重载:
DataContractJsonSerializer 构造函数(类型、DataContractJsonSerializerSettings)
设置如下:
而且特别有趣的是:
...使用此实例 DataContractJsonSerializerSettings 序列化的对象图中可能存在的类型集合。
这些可能是相关的,但我找不到有关这些设置的更多信息 - 也许您可以尝试一下。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |