【发布时间】:2019-01-23 15:13:24
【问题描述】:
非常接近How to define variable in class to receive either List<string> or string when deserializing JSON?
我更喜欢用python来解析json。没有测试这个,但确定它有效,现在做了几次。 #PythonForLife
import json
str = '{
"Resource" : ["1", "2"]
}'
j = json.loads(str)
if ( isinstance( str["Resource"], list ):
print(str["Resource"][0]) //or do whatever
else:
print(str["Resource"]) //same
我想知道在 C# 中执行此类操作的最佳做法是什么。我有一个类似的模型
public class RootObject
{
public IEnumerable<string> Resource {get; set;)
}
这是非常脆弱的,因为它是硬编码的,只处理集合,一旦收到字符串就会中断。我讨厌尝试捕获并使用另一个模型,因为这只是一个属性,在同一个模型中我确实有更多这样的属性。为什么这甚至是一个问题?我在这里链接的是最好/更好/工作的解决方案吗?
【问题讨论】:
-
您可以反序列化为
List<string>或string,一种选择是收集带有分隔符的string类型内的集合,可以很容易地将其转换为数组使用Splitapi -
由于您使用的是 Json.NET,这看起来像是 How to handle both a single item and an array for the same property using JSON.net 和/或 How to handle json that returns both a string and a string array? 的副本。同意?您链接到的问题中的解决方案不常用,因为它需要修改模型而不是应用
JsonConverter。 -
我支持stackoverflow.com/a/18997172/3269453,看起来很标准,并且让模型不那么凌乱。谢谢。
-
@Gopi 是的,看起来像一个非常干净的解决方案
-
感觉很多人可能需要维护这个标准实现的一种形式。这应该是开箱即用的。
标签: c# design-patterns json.net