我查看了有关反序列化的最新帖子:
但是使用提供的故障排除方法,我无法解决当前的问题。看起来我不是唯一一个无法找到经过验证的方法的人,所以我希望解决方案可以帮助很多人。我甚至搜索过Safari Books Online,我得到的总体印象是JSON支持仅适用于Silverlight。
目前我不考虑转移到JSON.net,除非它是实现我的目标的唯一方法:将JSON对象发布到.NET WCF Web服务并更新数据库中的相应记录。我遵循了Service Monitor跟踪,netmon跟踪等,它们都显示我的服务端点似乎没有将JSON输入传递给我声明的用于解析单个JSON属性的方法。
我的运营合同:
//Update Ticket
[OperationContract]
[WebInvoke(Method = "PUT",
UriTemplate = "UpdateTicket",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
TimeTicket UpdateTicket(TimeTicket t);
我的数据合同:
[Serializable]
[DataContract]
public class TimeTicket
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Project { get; set; }
[DataMember]
public int Hours { get; set; }
[DataMember]
public DateTime Date { get; set; }
}
处理JSON数据的方法的部分内容。它在“where x.ID == t.ID”行失败,因为t是一个空对象:
public TimeTicket UpdateTicket(TimeTicket t)
{
MWAEntities db = new MWAEntities();
var tick = (from x in db.TEST_TimeTicket
where x.ID == t.ID
select new TimeTicket
{
ID = x.ID,
Project = x.project,
Hours = x.hours,
Date = x.date
}).FirstOrDefault();
在执行期间,我正在使用curl(在Mac OS X上)发送JSON数据,如下所示:
curl -X PUT http://mywebserver:8000/UpdateTicket -d '{"ID":1,"Project":"Project A-edit2","Hours":32,"Date":"\/Date(1301630400000-0400)\/"}' -H "Content-Type:application/json" -v
详细输出:
* About to connect() to mywebserver port 8000 (#0)
* Trying 192.168.210.218... connected
* Connected to mywebserver (192.168.210.218) port 8000 (#0)
> PUT /UpdateTicket HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
> Host: mywebserver:8000
> Accept: */*
> Content-Type:application/json
> Content-Length: 85
Netmon跟踪显示服务器收到我传递的JSON。
有没有办法确定我的JSON发生了什么以及处理数据的最佳做法?谢谢你的教育!
答案 0 :(得分:1)
Chad_C,嗨。
我认为您的JSON有效负载应为:
'{"t":{"ID":1,"Project":"Project A-edit2","Hours":32,"Date":"\/Date(1301630400000-0400)\/"}}'
是你的TimeTicket(UpdateTicket(TimeTicket t))