在WCF服务中反序列化Message对象

时间:2013-08-14 16:34:11

标签: json wcf json.net datacontractserializer wcf-rest

为了向我们的WCF服务传递JSON数据,我们将返回类型和方法参数的类型替换为System.ServiceModel.Channels.Message

这是一种解决方法,因为否则将使用默认的DataContractJSONSerializer,它将引发异常,因为我们的DTO对象将DataContract属性的IsReference设置设置为true,此序列化程序不支持。

例如,新的Read方法如下所示:

public Message ReadCars()
{
    ItemInfoList<CarDto> cars = this.ReadCars(this.jsonItem);
    string jsonString = JsonConvert.SerializeObject(cars);

    return WebOperationContext.Current.CreateTextResponse(jsonString,
                "application/json; charset=utf-8",
                Encoding.UTF8);
}

并且一切都是工作属性但问题出现在我们需要将Car参数传递给方法时:

public Message CreateCar(Message car)

我们使用AJAX请求从javascript调用服务并传递JSON数据。

问题是如何将这个JSON数据反馈解析为CarDTO对象?

问题是Message将其主体存储为XML而不是JSON,我们无法获取真实的请求数据。

P.S。我们不希望使用自定义序列化程序替换默认序列化程序。我们只想手动将对象序列化为JSON,使用Message发送它们并从Message中获取对象(有问题的步骤)。

0 个答案:

没有答案