Serialization odata服务与其.Net生成的客户端代理之间的地理位置数据类型不兼容
我正在尝试使用JayStorm的odata兼容云数据库特性进行概念验证。到目前为止,它进展顺利,但我有一个大问题,它属于odata服务客户机代理序列化类别 我的odata服务url是: 我创建了一个简单的.Net控制台应用程序,并向该服务添加了一个服务引用。乍一看一切正常,但是地理位置json负载的服务器端数据类型之间存在不兼容:{type:Point,坐标:[-71.56236648559569,42.451074707889646],crs:{properties:{name:EPSG:4326}以及添加引用向导选择的客户端类型。它们似乎是非常不同的数据类型,仅客户端选择查询或客户端插入/更新不起作用。例如,下面的代码在SaveChanges行上引发异常Serialization odata服务与其.Net生成的客户端代理之间的地理位置数据类型不兼容,serialization,xml-serialization,odata,datacontractserializer,jaydata,Serialization,Xml Serialization,Odata,Datacontractserializer,Jaydata,我正在尝试使用JayStorm的odata兼容云数据库特性进行概念验证。到目前为止,它进展顺利,但我有一个大问题,它属于odata服务客户机代理序列化类别 我的odata服务url是: 我创建了一个简单的.Net控制台应用程序,并向该服务添加了一个服务引用。乍一看一切正常,但是地理位置json负载的服务器端数据类型之间存在不兼容:{type:Point,坐标:[-71.56236648559569,42.451074707889646],crs:{properties:{name:EPSG:43
System.Data.Services.Client.DataServiceRequestException was unhandled
HResult=-2146233079
Message=An error occurred while processing this request.
Source=Microsoft.Data.Services.Client
StackTrace:
at System.Data.Services.Client.SaveResult.HandleResponse()
at System.Data.Services.Client.BaseSaveResult.EndRequest()
at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)
at System.Data.Services.Client.DataServiceContext.SaveChanges()
at JumpSeatDataImporter.Program.Main(String[] args) in c:\Projects\JumpSeat\Dev\JumpSeatWeb\JumpSeatDataImporter\Program.cs:line 24
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Data.Services.Client.DataServiceClientException
HResult=-2146233079
Message=Format Exception: Invalid 'Point' format!
at Function.$data.GeographyBase.validateGeoJSON (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:75:29)
at GeographyPoint.GeographyBase (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:6:25)
at new GeographyPoint (/usr/lib/node_modules/jaydata/lib/TypeSystem/Types/Geography.js:94:29)
at $data.oDataConverter.fromDb.$data.GeographyPoint (/usr/lib/node_modules/jaydata/lib/Types/StorageProviders/oData/oDataConverter.js:55:64)
at Airport.$data.Entity.$data.Class.define.constructor (/usr/lib/node_modules/jaydata/lib/Types/Entity.js:189:41)
at Airport.Entity (eval at <anonymous> (/usr/lib/node_modules/jaydata/lib/TypeSystem/TypeSystem.js:463:20))
at new Airport (eval at <anonymous> (/usr/lib/node_modules/jaydata/lib/TypeSystem/TypeSystem.js:463:20))
at EntitySetProcessor.$data.Class.define.invoke (/usr/lib/node_modules/jaydata/lib/JayService/OData/EntitySetProcessor.js:61:38)
at JSObjectAdapter.$data.Class.define.processRequest (/usr/lib/node_modules/jaydata/lib/JayService/JSObjectAdapter.js:89:37)
at JSObjectAdapter.$data.Class.define.handleRequest (/usr/lib/node_modules/jaydata/lib/JayService/JSObjectAdapter.js:165:26)
StatusCode=500
InnerException:
如何让客户端代理使用一个自定义声明的?类,该类允许我往返数据,包括地理位置属性?如果没有该类,我无法将数据从sql server和文件上载/更新到JayStorm
通过向控制台应用程序添加服务并运行上面提供的代码,您应该能够完全模拟我的问题。不要担心数据会弄乱
感谢地理类型目前仅通过JSON格式公开,这可能会在中期发生变化,.NET默认使用XML,这就留下了三个选项: 使用Data Services Client 5.5.0和Data Services Tools 5.3使您的.NET应用程序以JSON格式工作这将生成一个新的代理,它在上下文中接受format属性-我无法在.NET中实现这一点,但我希望您比我更好: 您可以使用HTML5页面或node.js将POI与JayData库一起导入 您可以将csv文件发布到处理该文件的JayStorm服务操作。您可以使用HttpRequest发布到服务操作
请考虑上传和插入。通常我们使用200个记录的块。请查看这个评论:我更新了数据服务客户端并得到了很多,但是现在好像有一个ODATA V3符合JayS暴服务的问题。你可以在这个帖子的评论部分阅读我的进展,你可以看到最后一个共享。似乎对这件事很了解的人:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Spatial;
using System.Text;
using System.Threading.Tasks;
namespace AirportDataImporter
{
class Program
{
static void Main(string[] args)
{
var db = new AirprotDB.mydatabaseService(new Uri("https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/"));
//{"Name":"sfd","Abbrev":"sd","GeoLocation":{"type":"Point","coordinates":[-71.56236648559569,42.451074707889646],"crs":{"properties":{"name":"EPSG:4326"},"type":"name"}}}
var airport = new JumpSeatDB.Airport();
airport.Abbrev = "Foo";
airport.Name = "Bar";
airport.GeoLocation = GeographyPoint.Create(51.87796, -176.64603);
db.AddToAirport(airport);
db.SaveChanges();
//var foo = db.Airport.ToList();
}
}
}