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

Asp.net web api Asp.net web api中的DbGeometry序列化问题,asp.net-web-api,deserialization,spatial,Asp.net Web Api,Deserialization,Spatial,我首先用EntityFramework6.0代码构建ODataV3WebAPI 一切正常,我可以执行CRUD操作回到api服务器 但是,我使用的是空间类型,我的一些实体具有DbGeometry属性。当我尝试从客户端应用程序(仅用于测试的控制台应用程序)更新/发布具有DbGeometry类型的实体时,我得到以下DataServiceRequestException: 没有为此对象定义无参数构造函数 这花了我一段时间,但我确定负责的是DbGeometry类型。我已经查看并制作了一个自定义的JsonC

我首先用EntityFramework6.0代码构建ODataV3WebAPI

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

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

没有为此对象定义无参数构造函数

这花了我一段时间,但我确定负责的是
DbGeometry
类型。我已经查看并制作了一个自定义的
JsonConverter
,我在其中应用了属性:

[Required]
[JsonConverter(typeof(DbGeometryConverter))]
[Column("geometria")]
public DbGeometry Geometria { get; set; }
那没用。除非删除
DbGeometry
属性,否则该对象不会在web api服务器上反序列化

我还尝试更改全局json序列化程序行为

var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new DbGeometryConverter());

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

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

我已经设法在控制器级别上使用完全相同的代码来实现它。这个想法来自于此

下面是包含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());
    }
}

以及使用DbGeometry的控制器上的
[CustomJson]
属性。

将Geometry属性作为对象会得到什么?最终,将对象带到映射器中并进行转换是可行的。您找到解决此问题的方法了吗?