你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Newtonsoft.Json 支持 Microsoft.Spatial library for .NET (Preview)

Microsoft.Spatial 包包含支持地理和几何运算的类和方法。 此库包含依赖于 Newtonsoft.Json 包 的转换器,以便在使用适用于 .NET 的 Azure SDK 时与 Microsoft.Spatial 一起使用。

入门

如果在应用程序中使用 Microsoft.Spatial 包,并希望使用 Newtonsoft.Json 序列化受支持的类,请安装此包。

安装包

使用 .NET CLI 从 NuGet 安装此包:

dotnet add package Microsoft.Azure.Core.Spatial.NewtonsoftJson

关键概念

此支持包包含 NewtonsoftJsonMicrosoftSpatialGeoJsonConverter 可添加到 JsonSerializerSettings 以反序列化地理对象(如 GeographyPoint)的类。 此转换器可与 Azure SDK 客户端库一起使用,如以下示例所示。

示例

Azure.Search.Documents 包用于演示如何反序列化包含地理点的搜索结果。 有关使用 Azure.Search.Documents 的详细信息和示例,请参阅其 自述文件

反序列化文档

考虑一个包含有关山脉信息的模型类:

public class Mountain
{
    [SimpleField(IsKey = true)]
    public string Id { get; set; }

    [SearchableField(IsSortable = true, AnalyzerName = LexicalAnalyzerName.Values.EnLucene)]
    public string Name { get; set; }

    [SimpleField(IsFacetable = true, IsFilterable = true)]
    public GeographyPoint Summit { get; set; }
}

NewtonsoftJsonMicrosoftSpatialGeoJsonConverter将 类添加到序列化程序选项将正确反序列化顶点位置:

// Get the Azure Cognitive Search endpoint and read-only API key.
Uri endpoint = new Uri(Environment.GetEnvironmentVariable("SEARCH_ENDPOINT"));
AzureKeyCredential credential = new AzureKeyCredential(Environment.GetEnvironmentVariable("SEARCH_API_KEY"));

// Create serializer options with our converter to deserialize geographic points.
JsonSerializerSettings serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    Converters =
    {
        new NewtonsoftJsonMicrosoftSpatialGeoJsonConverter()
    }
};

SearchClientOptions clientOptions = new SearchClientOptions
{
    Serializer = new NewtonsoftJsonObjectSerializer(serializerSettings)
};

SearchClient client = new SearchClient(endpoint, "mountains", credential, clientOptions);
Response<SearchResults<Mountain>> results = client.Search<Mountain>("Rainier");

foreach (SearchResult<Mountain> result in results.Value.GetResults())
{
    Mountain mountain = result.Document;
    Console.WriteLine("https://www.bing.com/maps?cp={0}~{1}&sp=point.{0}_{1}_{2}",
        mountain.Summit.Latitude,
        mountain.Summit.Longitude,
        Uri.EscapeUriString(mountain.Name));
}

如果搜索包含山脉的索引,可能会打印以下内容:

https://www.bing.com/maps?cp=46.85287~-121.76044&sp=point.46.85287_-121.76044_Mount%20Rainier

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 https://cla.microsoft.com

提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 在所有存储库中执行此操作一次。

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。

曝光数