我正在使用System.Text.Json包中的JsonSerializer. inspialize(json)方法在C#中读取一个SON文件JSON文件包含以下 node textClasses:

"textClasses": {
        "callout": {
            "fontSize": 29,
            "fontFace": "Roboto Regular",
            "color": "#5158A7"
        },
        "title": {
            "fontSize": 12,
            "fontFace": "Roboto Regular",
            "color": "#5A6066"
        },
        "header": {
            "fontSize": 11,
            "fontFace": "Roboto Light",
            "color": "#5A6066"
        },
        "label": {
            "fontSize": 11,
            "fontFace": "Roboto Light",
            "color": "#5A6066"
        }
    },

由于我们在textClasses node 下有变量子根名称(别名、标题、标题、标签),我应该如何定义我的C#项目中的类 struct ?

推荐答案

我的建议是创建具有子根名称所有可能性的类.如果收件箱中没有某些值,则会简单地映射缺少数据的空字符串、零或空字符串.

public class TextClass
{
    public CalloutBase Callout { get; set; }
    public CalloutBase Title { get; set; }
    public CalloutBase Header { get; set; }
    public CalloutBase Label { get; get; }
}
public class CalloutBase
{
    public int FontSize { get; set; }
    public string FontFace { get; set; }
    public string Color { get; set; }
}

您的CalloutBase类定义子成员,textClass将CalloutBase重复用于收件箱、标题、标题和标签.

任何丢失的数据都将解析为空.

例如,以下Json将解析为文本类对象,该对象具有收件箱、标题和标题的有效数据,但标签为空值:

"textClasses": {
        "callout": {
            "fontSize": 29,
            "fontFace": "Roboto Regular",
            "color": "#5158A7"
        },
        "title": {
            "fontSize": 12,
            "fontFace": "Roboto Regular",
            "color": "#5A6066"
        },
        "header": {
            "fontSize": 11,
            "fontFace": "Roboto Light",
            "color": "#5A6066"
        },
}

Csharp相关问答推荐

利用.NET 8中的AddStandardResilienceDeliveries和AddStandardHedgingDeliveries实现Resiliency

为什么我在PuppeteerSharp中运行StealthPlugin时会出现错误?

在Dapper中使用IasyncEum重写GetAsyncEum方法

需要深入了解NpgSQL DateTimeOffset处理

如何在NServicebus中配置学习传输的文件夹(NService bus 8)

使用命令初始化可绑定属性

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

MongoDB.NET-将数据绑定到模型类,但无法读取整数值

如何在不考虑年份的情况下判断日期时间是否在某个日期范围内?

UWP中的任务和界面

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

EF核心新验证属性`DeniedValues`和`StringCompison`不起作用

为什么@rendermode Interactive Auto不能在.NET 8.0 Blazor中运行?

在Docker容器中运行API项目时,无法本地浏览到index.html

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

匿名类型的AbstractValidator

如何从Azure函数使用Graph API(SDK 5.35)中的[FindMeetingTimes]

仅在ASP.NETCore应用程序中的附加单独端口上公开一组终结点

使用DI实例化带有动态参数的服务?

如何在.NET MAUI上在iOS和Mac之间共享代码?(no条件编译和无代码重复)