如何使用DataContracts序列化子类

时间:2014-11-04 12:19:14

标签: wcf xml-serialization datacontract

我刚刚开始编写WCF项目,并且我似乎无法修复序列化问题。我使用DataContracts和DataMembers将我的类序列化为XML。

我有一个包含属性TestResponse的班级TestParameter。此属性包含一个字符串参数。另外,我有一个名为TestParameter的{​​{1}}子类。我需要序列化这个子类。这三个类看起来像这样:

TestResponse.cs

TestParameterSubclass

TestParameter.cs

[DataContract(Namespace = Service.defaultNamespace, Name="TestResponse")]
public class TestResponse
{
    [DataMember(Name = "TestParameter")]
    public TestParameter param { get; set; }
}

TestParameterSubclass.cs

[DataContract(Namespace = Service.defaultNamespace, Name="TestParameter")]
[KnownType(typeof(TestParameterSubclass))]
public class TestParameter
{
    [DataMember(Name="ParamName")]
    public string ParamName {get; set;}
}

我有一个OperationContract

[DataContract(Name="TestParameterSubclass")]
public class TestParameterSubclass : TestParameter
{
}

[OperationContract] [WebInvoke( Method = "POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/calculateA")] TestResponse CalculateA(TestRequest data);

CalculateA

导致

public TestResponse CalculateA(TestRequest request)
{
    TestResponse tr = new TestResponse();
    TestParameterSubclass parameterSubclass = new TestParameterSubclass();
    tr.param = parameterSubclass;
    tr.param.ParamName = "hai";

    return tr;
}

但是,我需要XML使用子类名称作为元素名称,如此

<TestResponse>
  <TestParameter i:type="a:TestParameterSubclass">    
    <ParamName>hai</ParamName>
  </TestParameter>
</TestResponse>

有谁知道怎么做?

(我在反序列化输入XML方面遇到了类似的问题,但我认为这两个问题都是相关的,因此修复此问题(希望)也可以解决我的其他问题。)

0 个答案:

没有答案