我有一个涉及数据建模的问题。
我必须开发两个项目。其中涉及本地化(后端 API、前端角度)。
后端的目的是在 MongoDB 实例上执行 CRUD 操作,前端的目的是编辑或创建这些本地化。
对这些数据进行建模的最佳方法是什么?因为我想将其创建得尽可能通用。
数据:
"tabs": {
"overview": "Overview",
"schedule": "Schedule",
"insights": "Insights",
"settings": "Settings",
"presets": "Presets"
}
"general": {
"edit": Edit,
"bluetooth" {
"activate": "activation",
"test": "testing"
}
}
数据可以包含对象中的对象。 “蓝牙”示例。 该数据会不断增长,因为它应该包含某个应用程序的每个本地化版本。上面的例子是文件的前 14 行
我想的是这样的:
public string Category { get; set; }
public Dictionary<string, object> Translation { get; set; }
有更好的选择吗?
public string Category { get; set; }
public Dictionary<string, object> Translation { get; set; }
尝试过这个,但不知道这是否是最好的方法。
要记住的是,表示越通用,使用起来就越困难。因此,虽然最通用的表示是
byte[]
,但它并不是一个非常有用的表示。
如果您想解析任意 json 树,您可以使用 System.Text.Json 进行解析,并根据需要处理生成的 JsonNodes 或 JsonDocument。请参阅如何在 System.Text.Json 中使用 JSON 文档对象模型。但这样的代码往往相当复杂。
如果您可以指定特定的类型模型,那几乎肯定会更好。因为您可以让库将 json 转换为 c# 对象,并处理对象。类型模型可能包括多态类型、树,在某些情况下甚至包括循环引用,具体取决于特定的库和设置。
第一种方式是邪恶的。
Newtonsoft.Json
并反序列化为 dynamic
类型,并忽略所有类型安全。第二种方法很烦人,但技术上是正确的
System.Text.Json
你可以制作这样的任何课程:public class WeatherForecastWithExtensionData
{
public DateTimeOffset Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
[JsonExtensionData]
public Dictionary<string, JsonElement>? ExtensionData { get; set; }
//or:
//public Dictionary<string, object>? ExtensionData { get; set; }
}
并且类中未硬编码的所有属性都将神奇地以该字典结束。