C#中的常量字符串的嵌套列表

时间:2019-02-26 08:17:14

标签: c# .net json

任何方法都可以以干净的方式存储此数据,并且最好使用变量名而不是字符串作为键以避免输入错误?例如。 UNITED_STATES = "201"而不是"United States" = "201"

{
    "countries": {
         "id": "123",
         "data" {
             "United States": "201"
             "Canada": "202",
         }
    },
    "departments": { ... }
}

我是从KeyValuePairs开始的,但是在这里嵌套数据似乎是个坏主意。

private static readonly List<KeyValuePair<string, string>> CategoryIds = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Countries", "123"),
    new KeyValuePair<string, string>("Departments", "124")
};

5 个答案:

答案 0 :(得分:1)

此处有两种反序列化JSON的方法。

强打字方法(好的方法):

public class A
{
     public B Countries {get;set;}
     public C Departments {get;set;}
}

public class B
{
     public int Id {get;set;}
     public D Data {get;set;}
}

...

var result = JsonConvert.DeserializeObject<A>(json);

您手动创建DTO对象,只是期望它们成功反序列化。

动态方法(较差但有时可以接受的方法):

dynamic result = JsonConvert.DeserializeObject(json);

var data = result.countries.data;

您创建了一些“东西”( dynamic 本质上是一堆包裹在语法甘蔗中的分层字典),并不真正在乎所有它们,只想要其中的一些属性。

答案 1 :(得分:0)

也许您可以使用json.net JObject

它允许您使用动态对象并将它们与json字符串相互转换

JObject的文档 https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm

Nuget: https://www.nuget.org/packages/Newtonsoft.Json/

答案 2 :(得分:0)

为此,您可以使用rebase -i以及如下所示的dictionary<k,v>

enum

具有类似

的模型结构
enum CountryVal
{
 UnitesStates,
 Canada
}

答案 3 :(得分:0)

您可以如下创建一个公共类,然后可以在代码中调用CountriesConstants.UNITED_STATES之类的国家/地区值,如果需要更改该值,只需在CountriesConstants类中进行更新

public class CountriesConstants
{
    public const string UNITED_STATES = "201";
    public const string Canada = "202";
    //Add More
}

答案 4 :(得分:0)

NJsonSchema是一个库,通过该库,您可以使用csharp以及来自标准json模式的其他几种语言生成代码。它非常强大且可配置,可以为您铺路。但是正如我所说,它将期望标准的json模式作为生成的来源。

var schema = NJsonSchema.JsonSchema4.FromFileAsync(filename);
var generator = new CSharpGenerator(schema.Result);
var file = generator.GenerateFile();

以上是从json模式生成csharp类所需的最少代码量。您可以定义设置并传递给生成器功能来满足您的特殊需求。

该库的

github页面: NJsonSchema github

Nuget页面: NJsonSchema Nuget