Schema.NET 13.0.0
dotnet add package Schema.NET --version 13.0.0
NuGet\Install-Package Schema.NET -Version 13.0.0
<PackageReference Include="Schema.NET" Version="13.0.0" />
paket add Schema.NET --version 13.0.0
#r "nuget: Schema.NET, 13.0.0"
// 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.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 用在哪里?
网站
网站可以在其 html
的 head
部分定义结构化数据,以便搜索引擎能够在其搜索结果中显示更丰富的信息。以下是一个示例,说明 Google 如何在其搜索结果中显示有关您网站的扩展元数据。
在 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
类型,后者有自己的属性,如 StreetAddress
或 PostalCode
,这些可以将地址拆分为其组成部分。
为了实现这一点,Schema.NET 使用了一些巧妙的 C# 泛型和隐式类型转换,使得设置单个或多个值都是可能的,并且设置 string
或 PostalAddress
也是可能的
// 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;
}
这种魔法全部是通过在 OneOrMany
、Values
、Values
和 Values
类型中使用 隐式转换运算符 来实现的。这些类型都是 structs
,以确保最佳性能。
更多示例
有关更多示例和实际运行代码的示例,请查看项目源代码中的单元测试。
Schema.NET.Pending
在 schema.org 上还有许多挂起的类型,它们尚未完全形成且准备好用于生产。如果您需要使用这些类型,您可以安装 Schema.NET.Pending NuGet 包而不是 Schema.NET。此包包含所有已发布的模式类型以及所有挂起的类型。
持续集成
名称 | 操作系统 | 状态 | 历史记录 |
---|---|---|---|
Azure Pipelines | Ubuntu | ||
Azure Pipelines | Mac | ||
Azure Pipelines | Windows | ||
Azure Pipelines | 总体 | ||
GitHub Actions | Ubuntu、Mac 和 Windows | ||
AppVeyor | Ubuntu、Mac 和 Windows |
贡献与感谢
请查看贡献指南了解更多信息。
- kirkone - CI 从新的全局.json 文件中读取 .NET Core 版本。
- Turnerj - 添加了对
System.Text.Json
的支持,所有类型都实现了IEquatable
和GetHashCode
,并添加了额外的单元测试和错误修复。 - 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 已计算。 |
-
.NETFramework 4.6.2
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
- System.ValueTuple (>= 4.5.0)
-
.NETFramework 4.7.2
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
-
.NETStandard 2.0
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
-
net6.0
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
-
net7.0
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
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 |