C# WCF REST无法反序列化实现IXMLSerializable的类

C# WCF REST无法反序列化实现IXMLSerializable的类,c#,api,wcf,C#,Api,Wcf,我有一个已转换为rest的WCF项目。 我很难为其类型实现IXMLSerializable的属性接收正确的值 [Serializable] [DataContract] [XmlType(TypeName = "Dimension")] [XmlInclude(typeof(SharedDimension))] public class Dimension { [DataMember] public string Id {get;set} //[DataMember]

我有一个已转换为rest的WCF项目。 我很难为其类型实现IXMLSerializable的属性接收正确的值

[Serializable]
[DataContract]
[XmlType(TypeName = "Dimension")]
[XmlInclude(typeof(SharedDimension))]
public class Dimension
{
    [DataMember] 
    public string Id {get;set}

    //[DataMember] 
    [XmlElement(ElementName = "Members")]
    public Members Members { get; set; }

    // another properties of Dimension class
}


[Serializable]
 //[XmlSchemaProvider("GetSchema")]
[XmlSerializerFormat]
[XmlRoot]
 public class Members: IXMLSerializable 
 public List<Member> Items
 {
    get
    {
    //code that use the IXMLSerializable goes here
    }
    set
    {
    //code that use the IXMLSerializable goes here
    }
}

// another properties of Members class


public System.Xml.Schema.XmlSchema GetSchema()
{
    return null;
}

[Serializable]
[XmlType(TypeName = "Member")]
public class Member : Equatable<Member>, ICodrObject
{
    // properties of Member class
}

public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/ProcessDimensions")]
    bool ProcessDimensions(int productId, List<Dimension> dimensions);

    // another end points
}
public class Service implements IService
{
    bool ProcessDimensions(int productId, List<Dimension> dimensions){
    //  code goes here 
}

我仍在使用.NET Framework 4.6.1

您的
JSON
数据格式没有问题。取消注释
[DataMember]
语句将解决此问题

//[DataMember] 
[XmlElement(ElementName = "Members")]
public Members Members { get; set; }
尽管您说您正在使用
XmlSerializer
,但实际上您在整个服务中都在使用
DataContractSerializer
DataContractSerializer
是WCF中的默认序列化程序,其中包括未使用
[DataContract]
修饰的类。如果我们想手动切换到
XmlSerializer
,我们应该使用
[XmlSerializerFormat]
来装饰服务合同。
有关详细信息,

如果有什么我可以帮忙的,请随时告诉我。
已更新。
请删除相关的
XMlserializer
属性,它可能会干扰
DataContractSerializer
。请考虑下面的定义。

    [DataContract]
    public class Dimension
    {
        [DataMember]
        public string Id { get; set; }
        [DataMember]
        public Members Members { get; set; }

    }

    //DataContractSerializer is the serializer by default.
    public class Members
    {
        public string ID { get; set; }
        public List<Member> Items { get; set; }    
    }
    public class Member 
    {
        public int Id { get; set; }
}
[DataContract]
公共类维度
{
[数据成员]
公共字符串Id{get;set;}
[数据成员]
公共成员成员{get;set;}
}
//默认情况下,DataContractSerializer是序列化程序。
公共班级成员
{
公共字符串ID{get;set;}
公共列表项{get;set;}
}
公共班级成员
{
公共int Id{get;set;}
}

感谢您提供的信息,我尝试了这个方法,但成员字段始终为空。我尝试转换我的端点来接受XML,但是当我从邮递员那里消费结束时,它告诉它XML无效时是无效的XML。我启用了WebHTTP的帮助页,我看不出我可以为成员提供数据。请考虑我对数据契约的上述定义。对我们来说非常重要,不想在没有ISerializable的情况下复制类。最后将其作为字符串发送到WCF,并自己序列化。我尝试了和您建议的类似的方法,但在反序列化(名称空间和nil)方面遇到了问题。谢谢你对我的耐心
    [DataContract]
    public class Dimension
    {
        [DataMember]
        public string Id { get; set; }
        [DataMember]
        public Members Members { get; set; }

    }

    //DataContractSerializer is the serializer by default.
    public class Members
    {
        public string ID { get; set; }
        public List<Member> Items { get; set; }    
    }
    public class Member 
    {
        public int Id { get; set; }
}