我刚刚开始编写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方面遇到了类似的问题,但我认为这两个问题都是相关的,因此修复此问题(希望)也可以解决我的其他问题。)