此 JSON 文件的通用类

问题描述 投票:0回答:2

我有一个涉及数据建模的问题。

我必须开发两个项目。其中涉及本地化(后端 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; }

尝试过这个,但不知道这是否是最好的方法。

c# .net data-modeling
2个回答
1
投票

要记住的是,表示越通用,使用起来就越困难。因此,虽然最通用的表示是

byte[]
,但它并不是一个非常有用的表示。

如果您想解析任意 json 树,您可以使用 System.Text.Json 进行解析,并根据需要处理生成的 JsonNodes 或 JsonDocument。请参阅如何在 System.Text.Json 中使用 JSON 文档对象模型。但这样的代码往往相当复杂。

如果您可以指定特定的类型模型,那几乎肯定会更好。因为您可以让库将 json 转换为 c# 对象,并处理对象。类型模型可能包括多态类型、树,在某些情况下甚至包括循环引用,具体取决于特定的库和设置。


0
投票

第一种方式是邪恶的。

  1. 只需使用
    Newtonsoft.Json
    并反序列化为
    dynamic
    类型,并忽略所有类型安全。

第二种方法很烦人,但技术上是正确的

  1. 使用
    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; }

}

并且类中未硬编码的所有属性都将神奇地以该字典结束。

© www.soinside.com 2019 - 2024. All rights reserved.