【发布时间】:2016-10-20 11:52:28
【问题描述】:
所以我的问题有点复杂。
主要目标:通过 WCF 服务将包含玩家列表(类/表)的帐户(类/表)从 Web 应用程序注册到 SQL Server 数据库中。
因此,为了创建类,我使用了 Linq-to-SQL,它创建了 Account 和 Player 类。 Player 具有指向 Account 表的外键 AccountEmail。由于Account 类有EntitySet<Player> _Players;。
现在 Web 应用程序引用了此服务,当用户完成注册时,我正在使用 WebClient 和 DataContractJsonSerializer 向服务发出 POST 请求。
很遗憾,服务或 http 协议无法理解请求:
System.Net.WebException:远程服务器返回错误:(400)
来自服务器的完整错误响应
https://s31.postimg.org/x6b27uqqj/errorrr.png
失败在服务端,由于某种原因它不知道如何读取 json 播放器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}]}
问题:
我猜那个 REST 服务只希望得到
Account并且不知道玩家名单是什么?我必须以某种方式定义它。为什么在服务中
Account有EntitySet<Player> _Players;?在客户端中添加对服务的引用后,它是一个数组Player[]?为什么 Linq-to-SQL 向播放器添加字段
Account?它应该包含什么?如您所见,该字段在 json 中为空。复杂对象/已知类型是否与我的问题有关?
请帮我解决这个问题,谢谢!
【问题讨论】:
标签: asp.net json web-services wcf rest