Устранение неполадок десериализации JSON - PullRequest
2 голосов
/ 28 апреля 2011

Я просмотрел последние сообщения о десериализации:

но, используя предоставленные методы устранения неполадок, я не смог решить свою текущую проблему. Похоже, я не единственный, у кого возникли проблемы с поиском проверенного метода, поэтому я надеюсь, что решение поможет довольно многим людям. Я даже искал 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, и лучшие практики для обработки данных? Спасибо за образование!

1 Ответ

1 голос
/ 28 апреля 2011

Chad_C, Привет.

Я думаю, что ваша полезная нагрузка JSON должна быть:

'{"t":{"ID":1,"Project":"Project A-edit2","Hours":32,"Date":"\/Date(1301630400000-0400)\/"}}'

t является вашим TimeTicket (UpdateTicket (TimeTicket t))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...