【问题标题】:Azure Function JsonConvert Document Spatial PointAzure Function JsonConvert 文档空间点
【发布时间】:2017-12-20 14:40:06
【问题描述】:

我有一个模型,它有一个使用 Microsoft.Azure.Documents.Spatial.Point 类型的属性。

public class TelemetryLiveExample
{
[JsonProperty("location")]
public Point Location { get; set; }
}

我希望能够使用 Newtonsoft JsonConvert 对消息进行序列化和反序列化。例如,如果我在本地序列化以下模型。

TelemetryLiveExample telemetryLive = new TelemetryLiveExample
{
Location = new Point(1, 2)
};
JsonConvert.SerializeObject(telemetryLive);

我得到以下结果,这是我所期望的,因为 Microsoft.Azure.Documents.Spatial.Point 有一个自定义转换器 PositionJsonConverter

"{"location":{"type":"Point","coordinates":[1.0,2.0]}}"

如果我执行完全相同的操作,但首先将其发布到 Azure 函数,我会得到以下结果。这看起来像在 Azure 函数中忽略了自定义转换器,但我不知道为什么。

{"location":{"Position":{"Coordinates":[1.0,2.0],"Longitude":1.0,"Latitude":2.0,"Altitude":null},"Crs":{"Name":"urn:ogc:def:crs:OGC:1.3:CRS84","Type":0},"Type":0,"BoundingBox":null,"AdditionalProperties":{}}}

我想弄清楚为什么 Azure Function 序列化程序会忽略自定义转换器并给出不同的结果?

【问题讨论】:

  • 你在哪里注册这个自定义转换器?
  • 它是一个自定义转换器,它是 Microsoft.Azure.Documents.Spatial 命名空间的一部分,位于 points 类使用的类 Position 上。 [JsonConverter(typeof(PositionJsonConverter))] public 密封类 Position : IEquatable 不是我亲手创建的。
  • docsPosition 存在于两个不同的库中:Microsoft.Azure.DocumentDB.Core.dllMicrosoft.Azure.Documents.Client.dll。您是否有可能在本地和 azure 上使用不同的版本,并且两者之间存在不一致,例如使用不同版本的 Json.NET?
  • @dbc 谢谢。这是我没见过的,我会调查的。

标签: c# azure json.net azure-cosmosdb azure-functions


【解决方案1】:

我想弄清楚为什么 Azure Function 序列化程序会忽略自定义转换器并给出不同的结果?

根据我的测试,天蓝色功能和本地没有区别。我使用以下演示代码和 nuget 包 Microsoft.Azure.DocumentDB 进行测试。

 public static class TestDocument
    {
        [FunctionName("TestDocument")]
        public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            TelemetryLiveExample telemetryLive = new TelemetryLiveExample
            {
                Location = new Point(1, 2)
            };
            var json = JsonConvert.SerializeObject(telemetryLive);

            return req.CreateResponse(HttpStatusCode.OK, json);
        }
    }

【讨论】:

  • 谢谢。我的依赖树如下 Microsoft.Azure.DocumentDb 1.19.1 Microsoft.Azure.WebJobs.ServiceBus 2.1.0-beta1 Microsoft.NET.Sdk.Functions 1.0.2 morelinq 2.8.0 Newtonsoft.Json 10.0.3 StackExchange.Redis 1.2 .6 WindowsAzure.Storage 8.5.0。我将剥离所有额外的依赖项并尝试隔离它。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 2020-11-23
  • 2020-12-13
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
相关资源
最近更新 更多