wcf rest返回对象,但属性为null

时间:2012-01-23 11:36:02

标签: wcf rest serialization null

只是想让一个小型的演示工作。我有一个域类库,一个控制台应用程序和一个wcf服务项目。

接口[ServiceContract]位于Domain classlib:

[ServiceContract]
public interface IService1
{
  [OperationContract]
  [WebGet]
  CompositeType GetDataUsingDataContract(string id);
}

该实现位于wcf服务应用程序(visual studio模板)中:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class Service1 : IService1
{
  public CompositeType GetDataUsingDataContract(string id)
  {
    if (id != null)
    {
      return new CompositeType() { StringValue = id, BoolValue=true };
    }
    return null;
  }
}

当我在IIS中正确绑定它时,它可以正常工作:
http://test123/Service1.svc/GetDataUsingDataContract?id=42
输出: { “d”:{ “__类型”: “的CompositeType:#Domain”, “BoolValue”:真 “的StringValue”: “42”}}

然后我写了消费者:

static void Main(string[] args)
{
  var factory = new ChannelFactory<IService1>(new WebHttpBinding(), new EndpointAddress("http://test123/Service1.svc"));
  factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
  var service = factory.CreateChannel();
  CompositeType result = service.GetDataUsingDataContract("42");
}

这会编译并运行,但CompositeType结果的属性为null和false。序列化没有正常进行。我使用fiddler来验证http调用是否正确,这与我手动使用浏览器完全一样。 当我将参数“42”更改为null时,它还为我提供了一个CompositeType对象而不是null。 Fiddler按预期显示{“d”:null}。

我很无能为力!

更新
CompositeType的代码

[DataContract]
public class CompositeType
{
  [DataMember]
  public bool BoolValue { get; set; }

  [DataMember]
  public string StringValue { get; set; }
}

0 个答案:

没有答案