Schema.NET 13.0.0

此包具有 SemVer 2.0.0 包版本:13.0.0+build.1303。
dotnet add package Schema.NET --version 13.0.0                
NuGet\Install-Package Schema.NET -Version 13.0.0                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Schema.NET" Version="13.0.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用此包。
paket add Schema.NET --version 13.0.0                
#r "nuget: Schema.NET, 13.0.0"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本的源代码中以引用此包。
// Install Schema.NET as a Cake Addin
#addin nuget:?package=Schema.NET&version=13.0.0

// Install Schema.NET as a Cake Tool
#tool nuget:?package=Schema.NET&version=13.0.0                

Schema.NET Banner

Schema.NET NuGet Package Schema.NET Azure Artifacts Package Schema.NET NuGet Package Downloads Twitter URL Twitter Follow

将 Schema.org 对象转换为强类型 C# POCO 类,以便在 .NET 中使用。所有类都可以序列化为 JSON/JSON-LD 和 XML,通常用于在 html 页面的 head 部分表示结构化数据。

简单示例

var website = new WebSite()
{
    AlternateName = "An Alternative Name",
    Name = "Your Site Name",
    Url = new Uri("https://example.com")
};
var jsonLd = website.ToString();

上面的代码输出以下 JSON-LD

{
    "@context":"https://schema.org",
    "@type":"WebSite",
    "alternateName":"An Alternative Name",
    "name":"Your Site Name",
    "url":"https://example.com"
}

如果要将结果写入 <script> 元素,请务必使用 .ToHtmlEscapedString() 方法,以避免使您的网站面临跨站脚本攻击的风险。请参阅以下示例

什么是 Schema.org?

schema.org 定义了真实世界中对象和服务的标准类及其属性集。这是一种机器可读的格式,是互联网上用于描述事物的一种通用标准。

Schema.org 用在哪里?

网站

网站可以在其 htmlhead 部分定义结构化数据,以便搜索引擎能够在其搜索结果中显示更丰富的信息。以下是一个示例,说明 Google 如何在其搜索结果中显示有关您网站的扩展元数据。

Google Logo Structured Data Example

html 中使用结构化数据需要使用 script 标签,其 MIME 类型为 application/ld+json,如下所示

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "url": "https://www.example.com",
  "name": "Unlimited Ball Bearings Corp.",
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-401-555-1212",
    "contactType": "Customer service"
  }
}
</script>
重要安全提示

在将网站的 <script> 标签的结果序列化时,应该使用替代的 .ToHtmlEscapedString(),以避免如果您的模式中的某些属性是从不受信任的来源设置的,那么您会暴露于跨站脚本(XSS)漏洞。在 ASP.NET MVC 项目中的使用可能如下所示

<script type="application/ld+json">
    @Html.Raw(Model.Schema.ToHtmlEscapedString())
</script>
Windows UWP 共享

Windows UWP 应用允许您使用 schema.org 类来共享数据。以下是如何共享关于一本书的元数据的示例。

类与属性

schema.org 定义了类和属性,其中每个属性可以有一个值或多个值的数组。此外,属性可以有多种类型,例如,Address 属性可以是 string 类型或 PostalAddress 类型,后者有自己的属性,如 StreetAddressPostalCode,这些可以将地址拆分为其组成部分。

为了实现这一点,Schema.NET 使用了一些巧妙的 C# 泛型和隐式类型转换,使得设置单个或多个值都是可能的,并且设置 stringPostalAddress 也是可能的

// Single string address
var organization = new Organization()
{
    Address = "123 Old Kent Road E10 6RL"
};

// Multiple string addresses
var organization = new Organization()
{
    Address = new List<string>()
    { 
        "123 Old Kent Road E10 6RL",
        "456 Finsbury Park Road SW1 2JS"
    }
};

// Single PostalAddress address
var organization = new Organization()
{
    Address = new PostalAddress()
    {
        StreetAddress = "123 Old Kent Road",
        PostalCode = "E10 6RL"
    }
};

// Multiple PostalAddress addresses
var organization = new Organization()
{
    Address = new List<PostalAddress>()
    {
        new PostalAddress()
        {
            StreetAddress = "123 Old Kent Road",
            PostalCode = "E10 6RL"
        },
        new PostalAddress()
        {
            StreetAddress = "456 Finsbury Park Road",
            PostalCode = "SW1 2JS"
        }
    }
};

// Mixed Author types
var book = new Book()
{
    Author = new List<object>()
    {
        new Organization() { Name = "Penguin" },
        new Person() { Name = "J.D. Salinger" }
    }
};

// Deconstruct a property containing mixed types
if (book.Author.HasValue)
{
    var (organisations, people) = book.Author.Value;
}

这种魔法全部是通过在 OneOrManyValuesValuesValues 类型中使用 隐式转换运算符 来实现的。这些类型都是 structs,以确保最佳性能。

更多示例

有关更多示例和实际运行代码的示例,请查看项目源代码中的单元测试。

Schema.NET.Pending

schema.org 上还有许多挂起的类型,它们尚未完全形成且准备好用于生产。如果您需要使用这些类型,您可以安装 Schema.NET.Pending NuGet 包而不是 Schema.NET。此包包含所有已发布的模式类型以及所有挂起的类型。

Schema.NET.Pending NuGet Package Schema.NET.Pending Azure Artifacts Package Schema.NET.Pending NuGet Package Downloads

持续集成

名称 操作系统 状态 历史记录
Azure Pipelines Ubuntu Azure Pipelines Ubuntu Build Status
Azure Pipelines Mac Azure Pipelines Mac Build Status
Azure Pipelines Windows Azure Pipelines Windows Build Status
Azure Pipelines 总体 Azure Pipelines Overall Build Status Azure DevOps Build History
GitHub Actions Ubuntu、Mac 和 Windows GitHub Actions Status GitHub Actions Build History
AppVeyor Ubuntu、Mac 和 Windows AppVeyor Build Status AppVeyor Build History

贡献与感谢

请查看贡献指南了解更多信息。

  • kirkone - CI 从新的全局.json 文件中读取 .NET Core 版本。
  • Turnerj - 添加了对 System.Text.Json 的支持,所有类型都实现了 IEquatableGetHashCode,并添加了额外的单元测试和错误修复。
  • shervinw - 为结构体添加了更好的空值处理。
  • kirk-marple - 重构JSON序列化以实现更高的效率。
  • nickevansuk - 增加更好的空值处理,并使用HTTPS而非HTTP。
  • MEmanuelsson - 增加了支持没有时间的schema.org日期类型。
  • halovanic - 为Schema.NET类型添加接口以增强灵活性。
  • AndreSteenbergen - 使工具能够在Linux上运行。
  • benmccallum - 添加XSS漏洞保护。
  • psampaio - 添加了解析支持以及单元测试。
  • icunningham88 - 优化了一个测试。
产品 兼容的以及额外的计算目标框架版本。
.NET net5.0已被计算。 net5.0-windows已被计算。 net6.0是兼容的。 net6.0-android已被计算。 net6.0-ios已被计算。 net6.0-maccatalyst已被计算。 net6.0-macos已被计算。 net6.0-tvos已被计算。 net6.0-windows已被计算。 net7.0是兼容的。 net7.0-android已被计算。 net7.0-ios已被计算。 net7.0-maccatalyst已被计算。 net7.0-macos已被计算。 net7.0-tvos已被计算。 net7.0-windows已被计算。 net8.0已被计算。 net8.0-android已被计算。 net8.0-browser已被计算。 net8.0-ios已被计算。 net8.0-maccatalyst已被计算。 net8.0-macos已被计算。 net8.0-tvos已被计算。 net8.0-windows已被计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET标准 netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 兼容。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容目标框架
包含目标框架(在包中)
了解有关目标框架.NET标准的更多信息。

NuGet包 (14)

显示依赖Schema.NET的前5个NuGet包

下载
OpenActive.NET

将OpenActive.io对象转换为.NET中使用的强类型C# POCO类。所有类都可以序列化为JSON/JSON-LD,从而轻松符合OpenActive建模规范。

Spin

基于.net core的跨平台Web框架

DeploySoftware.LaunchPad.Organizations

LaunchPad框架相关的组织代码。

DeploySoftware.LaunchPad.Shared

LaunchPad框架的共享代码。

net3000.common

为Net3000.ca应用程序构建的函数实用库。

GitHub仓库 (2)

显示依赖Schema.NET的前2个最受欢迎的GitHub仓库。

仓库 星标数
mjebrahimi/SeoTags
🚀 SeoTags可创建所有必需的SEO标签,如meta、link、twitter card(twitter:)、open graph(og:)以及JSON-LD模式(结构化数据)。
episerver/Foundation
Foundation提供了一个直观、结构良好且模块化的起点,允许开发者探索CMS、电子商务、个性化、搜索和导航、数据平台和实验。
版本 下载 最后更新
13.0.0 128,527 12/17/2023
12.0.0 258,162 5/10/2023
11.0.1 388,784 2/22/2022
11.0.0 129,420 11/9/2021
10.1.0 36,987 10/11/2021
10.0.0 106,245 6/25/2021
9.0.0 19,315 4/4/2021
8.0.0 199,706 11/2/2020
7.2.0 71,047 8/21/2020
7.1.0 143,424 3/18/2020
7.0.1 119,991 1/15/2020
7.0.0 6,691 12/31/2019
6.0.0 182,040 10/23/2019
5.0.0 5,641 9/29/2019
4.3.0 16,357 7/1/2019
4.2.0 17,713 6/2/2019
4.1.0 5,416 5/31/2019
4.0.0 928 5/27/2019
3.7.1 22,339 4/25/2019
3.7.0 1,592 4/23/2019
3.6.0 54,987 12/24/2018
3.5.0 81,377 10/19/2018
3.4.0 108,697 2/20/2018
3.2.4 23,575 7/2/2017
3.2.3 1,094 6/19/2017
3.2.2 983 6/15/2017
3.2.1 1,024 6/11/2017
3.2.0 1,928 6/8/2017