任何方法都可以以干净的方式存储此数据,并且最好使用变量名而不是字符串作为键以避免输入错误?例如。 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")
};
答案 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
答案 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