c#4.0-我的WCF服务希望请求数据看起来是什么样子



我现在有一个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 post来使用服务。它将{"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对象中。

有人给我提些建议吗?

感谢

它应该是这样的:

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

JSON对象上的每个属性都有一个值;而在CCD_ 4的情况下,它只是一个新对象。

请注意,在ZDevice类中,您称之为newPowerState,但在JSON中,您将其称为newLevel。在你的类中,它也是一个bool,但在JSON中,你给它分配了一个int。有些东西不匹配。

基于你的C#,我希望它看起来像这样:

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

JSON对象中的属性名称应该与C#中的参数/属性名称匹配。

相关内容

最新更新