C# 我有一个包含复杂类型的消息契约

C# 我有一个包含复杂类型的消息契约,c#,wcf,C#,Wcf,我有一个包含复杂类型的消息契约。在DataContract类中填充数据之后,我将DataContract的对象传递给消息契约构造函数。数据协定有多种复杂类型。我想重命名响应xml元素。因为它是一种复杂类型,所以我可以重命名合同类名。当我尝试重命名它的属性时,会在类名标记之外创建一个标记 [MessageContract] public class GetDetailsFromCardNumberResponse { [MessageBodyMember] public GetDe

我有一个包含复杂类型的消息契约。在DataContract类中填充数据之后,我将DataContract的对象传递给消息契约构造函数。数据协定有多种复杂类型。我想重命名响应xml元素。因为它是一种复杂类型,所以我可以重命名合同类名。当我尝试重命名它的属性时,会在类名标记之外创建一个标记

[MessageContract]
public class GetDetailsFromCardNumberResponse
{
    [MessageBodyMember]
    public GetDetailsFromCardNumberResponseBody Body { get; set; }

    [MessageBodyMember(Name = "PatronAccountCardValidation")]
    public PatronAccountCardValidation PatronValidation { get; set; }

    public GetDetailsFromCardNumberResponse() { }

    public GetDetailsFromCardNumberResponse(GetDetailsFromCardNumberResponseBody body)
    {
       PatronValidation = body.GetDetailsFromCardNumberResult;
    }
}
在上面的示例中,AccountCardValidation是复杂类型。在构造函数中,我试图分配给它的属性。但它不属于基本元素,如下所示

<PatronAccountCardValidation >
</PatronAccountCardValidation >
<PatronId></Patron>


我已经找到了它发生的原因。但不知道如何解决。请建议尝试添加XmlAttributes以控制xml序列化:

[XmlRoot(ElementName = "YourCustomClassName")]
public class GetDetailsFromCardNumberResponse
{
    [XmlElement(ElementName = "YourCustomAttibuteName")]
    public PatronAccountCardValidation PatronValidation { get; set; }
}

希望它有助于

尝试添加XmlAttributes以控制xml序列化:

[XmlRoot(ElementName = "YourCustomClassName")]
public class GetDetailsFromCardNumberResponse
{
    [XmlElement(ElementName = "YourCustomAttibuteName")]
    public PatronAccountCardValidation PatronValidation { get; set; }
}

希望能有所帮助

您是否尝试过在您的GetDetails中添加[KnownType(typeof(PatronAccountCardValidation))]属性(来自CardNumberResponse?是的,并且对那些与其他类具有依赖关系/引用的类执行相同操作。您好,实际上我有一个复杂的类型。。。该类型应作为标题。属性应作为成员。您是否尝试在GetDetailsFromCardNumberResponse中添加[KnownType(typeof(PatronAccountCardValidation))]属性?是的,并且对那些具有其他类的依赖/引用的类执行相同操作。您好,实际上我有一个复杂的类型。。。该类型应作为标题。属性应作为成员。。