Azure 移动应用服务器不会在 GET 上返回 DBGeography

问题描述

我的 Microsoft Azure 移动应用服务器实例很乐意将 DBGeography POINT() 存储为表列,该列包含在 JSON 数据中,确认已进行 POST。

我的“位置”数据对象:

public DbGeography Location { get; set; }

    [NotMapped]
    public double Longitude { get; set; }
    [NotMapped]
    public double Latitude { get; set; }

我的控制器:

public async Task<IHttpActionResult> PostI4Item([FromBody] IslandFourEntity item)
    {
        var coordinates = DbGeography.FromText($"POINT({item.Longitude} {item.Latitude})");
        item.Location = coordinates;
        
        IslandFourEntity current = await InsertAsync(item);
        return CreatedAtRoute("Tables",new { id = current.Id },current);
    }

“POST”请求后的邮递员响应:

{
"body": "Test body value","subject": "Test subject value","type": "type","location": {
    "geography": {
        "coordinateSystemId": 4326,"wellKNownText": "POINT (172.590401 -43.539994)"
    }
},"longitude": 172.590401,"latitude": -43.539994,"id": "58542f5ee84d4867ae1f3d2c3b098b1b","version": "AAAAAAAAD6I=","createdAt": "2021-03-05T00:16:12.292Z","updatedAt": "2021-03-05T00:16:12.731Z","deleted": false

}

但是,如果您获取所有表值,或仅获取一个单独的项目,则包含 DBGeography 项目的列不包含在其中(尽管肯定已保存在数据库中。)

该记录的认 GET 响应:

{
"deleted": false,"body": "Test body value"

}

如您所见,除“位置”外,其他所有列都被返回。

所以这个问题对于任何使用过 Microsoft Azure 移动应用服务的人来说可能更多,但是如何修改认的 Query() 方法以将 DBGeography 序列化为字符串?

解决方法

最终,你得到一个 IQueryable<T> ,然后它被 ASP.NET OData (v3) 系统或 Node.js 系统序列化(你不说你在使用哪个)。这里有两个问题 - IQueryable 返回什么,以及 oData 用它做什么。

由于它是 OData v3 端点,请尝试添加 ?$expand=location 以查看是否会扩展输出。阅读 the docs 中的 $expand 选项 - 第 5.1.3 节介绍了 $expand。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...