你当前正在访问 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 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。