gpt4 book ai didi

c# - PODIO JSON Feed to C# 对象多态性

转载 作者:太空狗 更新时间:2023-10-29 23:40:16 24 4
gpt4 key购买 nike

我正在编写一个程序来从跑道读取一个 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 程序员,但我从未使用过 .NET 中的 JSON。我原以为你现在至少会有一个好的、明确的答案,但由于你还没有任何,我会提供我的 0.02 美元,以防它对你有帮助。

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

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

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

在所有情况下:

  • <string1> == "Values" ,
  • <string2> == "type" ,
  • <value1> == [ <object> ] (即 <value1> 始终是一个包含单个 <object> 的数组),并且
  • <value2> == "a string describing the structure of the <object>"

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

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

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

  • 您是否考虑过运行字符串操作来“查找/提取”您感兴趣的类型,并设置显式 DataContractJsonSerializer(Type)对于每一种类型?

  • 否则,更一般地说,您应该能够处理 <object> 内的所有内容什么时候<value2> != "text" , 作为 Dictionary<string,string> , 然后根据需要根据您在 <value2> 中指定的类型逐个处理(或者甚至“手动”将它们转换为您的对象)。


此外,我注意到 .NET 4.5 引入了这个重载:

DataContractJsonSerializer Constructor (Type, DataContractJsonSerializerSettings)

设置如下:

特别有趣的是:

...a collection of types that may be present in the object graph serialized using this instance the DataContractJsonSerializerSettings.

这些可能是相关的,但我找不到关于任何这些设置的更多信息 - 也许您可以试验一下。

关于c# - PODIO JSON Feed to C# 对象多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12710056/

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