ASP.NET WCF REST LINQ-TO-SQL POST/WEBINVOKE JSON,对象具有由Linq-t



,所以我的问题有点复杂。

主要目标:注册帐户(class/table),其中包含Web应用程序的播放器列表(类/表)通过WCF服务到SQL Server数据库中。

因此,用于创建类,我使用了创建AccountPlayer类的Linq-to-SQL。PlayerAccount表中具有外键AccountEmail。因此,Account类具有EntitySet<Player> _Players;

现在,Web应用程序已引用此服务,当用户完成注册时,我正在使用WebClientDataContractJsonSerializer向服务提出邮政请求。

不幸的是,服务或HTTP协议无法理解请求:

system.net.webexception:远程服务器返回错误:(400)

服务器的完整错误响应
https://s31.postimg.org/x6b27uqqjj/errorrr.png

由于某种原因,失败在服务方面不知道如何读取JSON Player DB.designer.cs:line 295 at ReadPlayerFromJson(XmlReaderDelegator

服务:

[OperationContract]
[WebInvoke(UriTemplate = "/Register", 
           RequestFormat = WebMessageFormat.Json, 
           ResponseFormat = WebMessageFormat.Json, Method = "POST")]
void RegisterAccount(Account account);

客户端:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Account));
MemoryStream mem = new MemoryStream();
Account a = new Account { EMAIL = Email.Text, PASSWORD = Password.Text, NAME = nickname.Text};
a.Players = accountPLayers.ToArray();
ser.WriteObject(mem, a);
string data = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
WebClient webClient = new WebClient();
webClient.Headers["Content-type"] = "application/json";
webClient.Encoding = Encoding.UTF8;
webClient.UploadString(WEB_SITE_URL+ "/Register", "POST", data);

在没有玩家列表的情况下发送Account时,操作成功:

{"EMAIL":"test@gmail.com","NAME":"1","PASSWORD":"test","Players":null}

在玩家列表中,操作失败:

 {"EMAIL":"test@gmail.com","NAME":"1","PASSWORD":"test","Players":[{"Account":null,"AccountEmail":"test@gmail.com","FirstName":"test","Id":0,"LastName":"test","Type":-1}]}

问题:

  1. 我想REST服务期望仅获得Account,并且不知道玩家列表是什么?我必须以某种方式定义。

  2. 为什么在服务中Account中有EntitySet<Player> _Players;?在客户端添加了服务引用后,它是数组Player[]

  3. 为什么linq-to-sql将字段Account添加到播放器中?它应该包含什么?如您所见,该字段在JSON中为null。

  4. 复杂的对象/已知类型必须处理我的问题吗?

请帮助我解决这个问题,谢谢!

已解决!!!因此,如果有人会遇到这个问题,问题是播放器具有电子邮件列的外国钥匙来帐户电子邮件。当您创建JSON时,请勿将电子邮件放在每个播放器中LINQTOSQL知道该关联,并在解析JSON时会自动添加它。

所以我的JSON发送给服务看起来像这样:

 {"EMAIL":"test@gmail.com","NAME":"test","PASSWORD":"test@A","Players":[{"Account":null,"AccountEmail":null,"FirstName":"wow","Id":0,"LastName":"koko","Type":null}]}.

最新更新