Я просмотрел последние сообщения о десериализации:
но, используя предоставленные методы устранения неполадок, я не смог решить свою текущую проблему. Похоже, я не единственный, у кого возникли проблемы с поиском проверенного метода, поэтому я надеюсь, что решение поможет довольно многим людям. Я даже искал Safari Books Online, и у меня сложилось общее впечатление, что поддержка JSON только для Silverlight.
В настоящее время я не рассматриваю возможность перехода на JSON.net, если только это не единственный способ достичь моей цели: опубликовать объект JSON в веб-службе .NET WCF и обновить соответствующую запись в моей базе данных. Я следил за трассировками 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. Ошибка в строке "где 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, и лучшие практики для обработки данных? Спасибо за образование!