Schema.NET.Pending 13.0.0
前缀已保留
dotnet add package Schema.NET.Pending --version 13.0.0
NuGet\Install-Package Schema.NET.Pending -Version 13.0.0
<PackageReference Include="Schema.NET.Pending" Version="13.0.0" />
paket add Schema.NET.Pending --version 13.0.0
#r "nuget: Schema.NET.Pending, 13.0.0"
// Install Schema.NET.Pending as a Cake Addin #addin nuget:?package=Schema.NET.Pending&version=13.0.0 // Install Schema.NET.Pending as a Cake Tool #tool nuget:?package=Schema.NET.Pending&version=13.0.0
将 Schema.org 对象转换为用于 .NET 的强类型 C# POCO 类。所有类都可以序列化为 JSON/JSON-LD 和 XML,通常用于在 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()
方法,以避免使网站受到跨站脚本攻击(XSS)。下面是示例。
什么是Schema.org?
schema.org定义了现实世界中对象和服务的标准类及其属性。这种机器可读格式是网上描述事物的常用标准。
Schema.org在哪些地方使用?
网站
网站可以定义HTML的head
部分中的结构化数据,以便搜索引擎在搜索结果中显示更丰富的信息。以下是一个示例,展示了如何谷歌在其搜索结果中显示有关网站扩展元数据。
在html
中使用结构化数据需要一个MIME类型为application/ld+json
的script
标签,如下所示
<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()
,以避免由于您的schema中某些属性已从不受信任的来源设置而暴露您自己处于跨站脚本(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
类型或具有其自己的属性(如StreetAddress
或PostalCode
)的类型PostalAddress
,这将地址分解为其组成部分。
为了促进这一点,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<T>
、Values<T1, T2>
、Values<T1, T2, T3>
和Values<T1, T2, T3, T4>
类型中的隐式转换运算符来实现的。这些类型都是struct
,以获取最佳性能。
更多示例
要查看更多示例和实际运行的代码示例,请查看项目源代码中的单元测试。
Schema.NET.Pending
在schema.org上有许多待处理类型,这些类型尚未完全成型并可投入生产。如果您需要使用这些类型,请安装Schema.NET.Pending NuGet包,而不是Schema.NET。此包包含所有已发布和待处理的schema类型。
持续集成
名称 | 操作系统 | 状态 | 历史记录 |
---|---|---|---|
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 - 增加了只包含日期类型的支持,不包含时间。
- 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 Standard | 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 Framework 4.6.2
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
- System.ValueTuple (>= 4.5.0)
-
.NET Framework 4.7.2
- System.Memory (>= 4.5.5)
- System.Text.Json (>= 7.0.0)
-
.NET Standard 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包
此包未被任何NuGet包使用。
GitHub仓库
此包未被任何流行的GitHub仓库使用。