You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何生成含@开头属性名的Schema.org格式JSON

解决JSON序列化时保留@前缀属性名的问题

你需要生成带@context、@type这类@前缀属性的Schema.org格式JSON,但使用匿名类结合Newtonsoft.Json序列化时,属性名的@前缀会被自动移除,导致输出不符合预期。下面提供两种解决方法:

方法一:通过JsonProperty特性显式指定键名

因为匿名类无法直接添加序列化特性,所以需要定义一个强类型类,用JsonProperty特性指定JSON输出的键名:

using Newtonsoft.Json;

public class SchemaEvent
{
    [JsonProperty("@context")]
    public string Context { get; set; } = "https://schema.org";

    [JsonProperty("@type")]
    public string Type { get; set; } = "Event";

    public string Name { get; set; }

    public DateTimeOffset? StartDate { get; set; }

    public DateTimeOffset? EndDate { get; set; }
}

然后修改原代码,使用这个强类型类来构建数据:

private MarkupString JsonLdEvent
{
    get
    {
        var data = new SchemaEvent
        {
            Name = Data?.Subject,
            StartDate = Data?.UnderlyingEvent?.StartDateTime.DateTimeOffset,
            EndDate = Data?.UnderlyingEvent?.EndDateTime.DateTimeOffset
        };

        var json = JsonConvert.SerializeObject(data, Formatting.Indented);
        return new MarkupString(json);
    }
}

方法二:使用Schema.NET库

如果经常需要生成Schema.org格式的数据,推荐使用Schema.NET库。这个库专门针对Schema.org结构化数据设计,能自动处理@context、@type这类特殊属性,无需手动配置序列化规则,直接创建对应类型的对象即可完成序列化。


内容的提问来源于stack exchange,提问作者David Thielen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:22:40