Schema.NET.Pending 13.0.0

前缀已保留
This package has a SemVer 2.0.0 package version: 13.0.0+build.1303.
dotnet add package Schema.NET.Pending --version 13.0.0                
NuGet\Install-Package Schema.NET.Pending -Version 13.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Schema.NET.Pending" Version="13.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Schema.NET.Pending --version 13.0.0                
#r "nuget: Schema.NET.Pending, 13.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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.NET Banner

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

将 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部分中的结构化数据,以便搜索引擎在搜索结果中显示更丰富的信息。以下是一个示例,展示了如何谷歌在其搜索结果中显示有关网站扩展元数据。

Google Logo Structured Data Example

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

<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类型或具有其自己的属性(如StreetAddressPostalCode)的类型PostalAddress,这将地址分解为其组成部分。

为了促进这一点,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;
}

这种魔法是通过使用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类型。

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 - 增加了只包含日期类型的支持,不包含时间。
  • 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 Standard的更多信息。

NuGet包

此包未被任何NuGet包使用。

GitHub仓库

此包未被任何流行的GitHub仓库使用。

版本 下载 最后更新
13.0.0 37,328 12/17/2023
12.0.0 33,072 5/10/2023
11.0.1 80,535 2/22/2022
11.0.0 876 11/9/2021
10.1.0 204 10/11/2021
10.0.0 320 6/25/2021