C#反序列化为列表或字符串

时间:2019-01-23 06:44:24

标签: c# design-patterns json.net

非常接近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;)
}

这是如此脆弱,因为它被硬编码为仅处理集合,并且一旦接收到字符串就中断。我讨厌尝试捕获并使用其他模型,因为这只是一个属性,在同一模型中,我确实有更多类似的东西。为什么这甚至是问题?我在这里链接的是最佳/更好/可行的解决方案吗?

1 个答案:

答案 0 :(得分:0)

例如,您应该使用字典而不是列表:

    class MyClass
    {
        public void Test()
        {
            var x = @"{'Resource' : ['1', '2']}";

            var r = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(x);
        }
    }

    public static void Main(string[] args)
    {
        var l = new MyClass();
        l.Test();
    }