Compatibilidad de Newtonsoft.Json con la biblioteca Microsoft.Spatial para .NET (versión preliminar)

El paquete Microsoft.Spatial contiene clases y métodos que admiten operaciones geográficas y geométricas. Esta biblioteca contiene convertidores que dependen del paquete Newtonsoft.Json para su uso con Microsoft.Spatial al usar el SDK de Azure para .NET.

Introducción

Instale este paquete si usa el paquete Microsoft.Spatial en la aplicación y desea serializar las clases admitidas con Newtonsoft.Json.

Instalar el paquete

Instale este paquete desde NuGet mediante la CLI de .NET:

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

Conceptos clave

Este paquete de compatibilidad contiene la NewtonsoftJsonMicrosoftSpatialGeoJsonConverter clase que se puede agregar a JsonSerializerSettings para deserializar objetos geográficos como GeographyPoint. Este convertidor se puede usar con bibliotecas cliente del SDK de Azure, como se muestra en los ejemplos siguientes.

Ejemplos

El paquete Azure.Search.Documents se usa en ejemplos para mostrar cómo se pueden deserializar los resultados de búsqueda que contienen puntos geográficos. Para obtener más información y ejemplos con Azure.Search.Documents, consulte su archivo Léame.

Deserialización de documentos

Considere una clase de modelo que contiene información sobre las montañas:

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

Al agregar la NewtonsoftJsonMicrosoftSpatialGeoJsonConverter clase a las opciones del serializador, se deserializará correctamente la ubicación de la cumbre:

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

Si se busca un índice lleno de montañas, se puede imprimir lo siguiente:

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

Contribuciones

Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.

Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo tendrá que hacerlo una vez en todos los repositorios mediante nuestro CLA.

Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.

Impresiones