Как моя служба WCF ожидает, что данные запроса будут выглядеть? - PullRequest
1 голос
/ 01 июля 2011

У меня сейчас есть служба, размещенная на WCF, которая размещается самостоятельно и определяется следующим образом:

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, Method = "PUT", UriTemplate = "/device")]
void updateDeviceLevel(ZDevice device);

Класс ZDevice выглядит так:

public class ZDevice {
    public bool? newPowerState { get; set; }
    public int nodeId {get; set;}
}

У меня есть простой клиент Mac, который использует службу, используя сообщение http. Он отправляет {"newLevel":27,"nodeId":6} в \devices url, и .NET волшебным образом заполняет значения в объект ZDevice для меня. Здесь все хорошо.

Теперь, однако, мне нужно добавить некоторую базовую безопасность в микс. Я сделал это, добавив новый параметр и несколько «RequestWrapping» к вызову метода:

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest, Method = "PUT", UriTemplate = "/device")]
void updateDeviceLevel(string password, ZDevice device);

Сейчас я пытаюсь выяснить, какой синтаксис сервер ожидает от потребляющих клиентов. Я надеялся, что публикация в {"password":"somepwd", "newLevel":27,"nodeId":6} сработает, но .NET больше не может «десериализовать» это в объект ZDevice, как это было раньше.

Кто-нибудь получил несколько предложений для меня?

Спасибо

1 Ответ

3 голосов
/ 01 июля 2011

Это должно выглядеть так:

{"password":"somepwd", "device": {"newLevel":27,"nodeId":6}}

Каждое свойство объекта JSON имеет значение; а в случае device это просто новый объект.

Обратите внимание, что в вашем ZDevice классе вы назвали его newPowerState, но в JSON вы называете его newLevel. В вашем классе это тоже bool, но в JSON вы присваиваете ему int. Что-то не совпадает.

Исходя из вашего C #, я ожидаю, что это будет выглядеть так:

{"password":"somepwd", "device": {"newPowerState":true,"nodeId":6}}

Имена свойств в вашем объекте JSON должны совпадать с именами параметров / свойств в C #.

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