gpt4 book ai didi

asp.net-web-api - Asp.net web api 中的 DbGeometry 序列化问题

转载 作者:行者123 更新时间:2023-12-03 17:48:33 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 6.0 Code First 构建 OData v3 Web API。

一切正常,我可以将 CRUD 操作执行回 api 服务器。

但是,我使用的是空间类型,并且我的一些实体具有 DbGeometry 属性。当我尝试从客户端应用程序(只是用于测试的控制台应用程序)更新/发布具有 DbGeometry 类型的实体时,我收到此 DataServiceRequestException:

No parameterless constructor defined for this object.



我花了一段时间,但我确定了 DbGeometry类型为负责人。我已经看过 this topic here并定制了 JsonConverter ,我申请的房产:
[Required]
[JsonConverter(typeof(DbGeometryConverter))]
[Column("geometria")]
public DbGeometry Geometria { get; set; }

那没有用。除非我删除 DbGeometry,否则该对象不会在 Web api 服务器上反序列化属性(property)。

我还尝试更改全局 json 序列化程序行为
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new DbGeometryConverter());

也是徒劳的。我真的需要 DbGeometry特性。我还能做些什么来解决这个问题?

最佳答案

有点晚了,但对于那些寻求答案的人:

我已经设法在 Controller 级别使用完全相同的代码来做到这一点。这个想法来自这个 SO Question&Answer.

所以,这里是包含 DbGeometryConverter 的代码。

DbGeometryConverter.cs:

public class DbGeometryConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof(DbGeometry));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var location = JObject.Load(reader);
var token = location["Geometry"]["WellKnownText"];
string geom = token.ToString();

token = location["Geometry"]["CoordinateSystemId"];
int srid = token != null ? int.Parse(token.ToString()) : 0;
var converted = DbGeometry.FromText(geom, srid);
return converted;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}

public override bool CanWrite => false;
}

CustomJsonAttribute.cs:
public class CustomJsonAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
{
var formatter = controllerSettings.Formatters.JsonFormatter;
formatter.SerializerSettings.Converters.Add(new DbGeometryConverter());
}
}

[CustomJson]使用 DbGeometry 的 Controller 上的属性。

关于asp.net-web-api - Asp.net web api 中的 DbGeometry 序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com