【发布时间】:2019-03-22 11:04:41
【问题描述】:
从http服务器接收到的Json数据是这样的:
[
{
"token":"NlhYnzF0xqG"
},
[
{
"ts":"2019-03-21 14:06:22.123",
"id":"CC_RTC_Second",
"val":"22"
},
{
"ts":"2019-03-21 14:06:00.096",
"id":"CC_RTC_Minute",
"val":"6"
},
{
"ts":"2019-03-21 14:00:00.276",
"id":"CC_RTC_Hour",
"val":"14"
}
]
]
我尝试了 Newtonsoft.Json 文档中介绍的一些技术,但我找不到正确的方法。我花了两天时间测试 StackOverflow 答案中的解决方案,但没有成功。
在这种特殊情况下我应该使用哪些 C# 类型和技术?
数据结构可以变化:
完整的属性列表是:td、id、val、flags、type、uts、nr。
它们都是字符串。
如果attrs不存在,服务器可以省略,例如我只能获取ts + id。
有什么方法可以处理这样的数据吗?
【问题讨论】:
-
声明类来保存你的属性,然后反序列化为那些。您的问题不清楚,您能告诉我们您的尝试吗?
-
您很可能需要一个自定义反序列化器,或者您最终会得到对象/动态类型,因为您有一个包含 1 个对象和 1 个数组的数组,所以您可以不要在此处创建
List<T>,因为对于不同的元素,您有不同的T。 -
如果只使用一个对象 ts+id+val,我可以使用:
-
您可以使用
JsonConvert.DeserializeObject<JToken>(json).Select(token => token is JArray ? (object)token.ToObject<List<Other>>() : (object)token.ToObject<TokenData>()),替换为正确的类型。