.NET 用 Microsoft.Spatial ライブラリの System.Text.Json サポート

Microsoft.Spatial パッケージには、地理的な操作をサポートするクラスとメソッドが含まれています。 このライブラリには、Azure SDK for .NET を使用する場合に Microsoft.Spatial で使用するために System.Text.Json に依存するコンバーターが含まれています。

作業の開始

アプリケーションで Microsoft.Spatial パッケージを使用し、サポートされているクラスを System.Text.Json でシリアル化する場合は、このパッケージをインストールします。

パッケージをインストールする

.NET CLI を使用して NuGet からこのパッケージをインストールします。

dotnet add package Microsoft.Azure.Core.Spatial

主要な概念

このサポート パッケージには、 MicrosoftSpatialGeoJsonConverter などのGeographyPoint地理的オブジェクトを逆シリアル化するために JsonSerializerOptions に追加できる クラスが含まれています。 このコンバーターは、次の例に示すように、Azure SDK クライアント ライブラリで使用できます。

Azure.Search.Documents パッケージは、地理的なポイントを含む検索結果を逆シリアル化する方法を示すために、例で使用されます。 Azure.Search.Documents を使用する詳細と例については、 その README を参照してください。

ドキュメントの逆シリアル化

山に関する情報を含むモデル クラスについて考えてみましょう。

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; }
}

クラスを MicrosoftSpatialGeoJsonConverter シリアライザー オプションに追加すると、サミットの場所が正しく逆シリアル化されます。

// 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.
JsonSerializerOptions serializerOptions = new JsonSerializerOptions
{
    Converters =
    {
        new MicrosoftSpatialGeoJsonConverter()
    },
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};

SearchClientOptions clientOptions = new SearchClientOptions
{
    Serializer = new JsonObjectSerializer(serializerOptions)
};

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) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、 https://cla.microsoft.com を参照してください。

pull request を送信すると、CLA を提供して PR (ラベル、コメントなど) を適宜装飾する必要があるかどうかを CLA ボットが自動的に決定します。 ボットによって提供される手順にそのまま従ってください。 これは、CLA を使用するすべてのリポジトリで 1 回だけ行う必要があります。

このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。

インプレッション数