首页 > 解决方案 > C# 反序列化为列表或字符串

问题描述

非常接近如何在类中定义变量以在反序列化 JSON 时接收 List<string> 或字符串?

我更喜欢用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;)
}

这非常脆弱,因为它是硬编码的,只能处理集合,一旦收到字符串就会中断。我讨厌尝试捕获并使用另一个模型,因为这只是一个属性,在同一个模型中我确实有更多这样的属性。为什么这甚至是一个问题?我在这里链接的是最好/更好/工作的解决方案吗?

标签: c#design-patternsjson.net

解决方案


您应该使用 Dictionary 而不是 List 例如:

    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();
    }

推荐阅读