我有一堆只有XmlSerializable的第三方 Contract ,并且无法更改,但是我需要通过WCF通道传输它们 . 它们没有使用DataContract / DataMember属性进行修饰,我无法控制它 .

例:

[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.opentravel.org/OTA/2003/05")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.opentravel.org/OTA/2003/05", IsNullable=true)]
public partial class HotelReservationsType
{
    [System.Xml.Serialization.XmlElementAttribute("HotelReservation")]
    public HotelReservationsTypeHotelReservation[] HotelReservation
    {
        get
        {
            return this.hotelReservationField;
        }
        set
        {
            this.hotelReservationField = value;
        }
    }

    [System.Xml.Serialization.XmlArrayItemAttribute("RoutingHop", IsNullable=false)]
    public RoutingHopTypeRoutingHop[] RoutingHops
    {
        get
        {
            return this.routingHopsField;
        }
        set
        {
            this.routingHopsField = value;
        }
    }

    ...

我已经创建了一个非常基本的WCF服务(主要由Visual Studio生成)和一个客户端,该服务器也是由VS使用添加服务引用功能生成的 . 上述 Contract 在两个项目引用的单独程序集中,并且在客户端中选择要重新使用的已知类型 .

根据这个(据我所知):WCF Serializable Types WCF应该能够传输上述类型的对象,但我得到的所有成员都是空的 .

enter image description here

为什么我的对象只包含空值,我做错了什么? DataContract / DataMember装饰必须具备吗?那么我们应该如何使用第三方非WCF Contract 呢?