即使我使用的是XmlSerializer,也会使用字段后缀创建WCF自动生成的类

问题描述 投票:0回答:1

我有核心服务和微服务。 Micro服务引用核心WCF服务。当我添加引用时,references.cs包含我的私有属性公开为public的类,并且在我的所有属性上都有一个字段后缀

例如:

public string SMCD { get; set; }成为private string sMCDField;

以下是我引用的课程:

CoreInterface.cs

[ServiceContract(Namespace = Constants.Namespace, Name = "M3ApiCalls")]
public interface IService
{

    [System.ServiceModel.XmlSerializerFormatAttribute()]
    [OperationContractAttribute(AsyncPattern = true)]
    IAsyncResult BeginCRS100MI_List(string Salesperson, decimal Timestamp, AsyncCallback asyncCallback, object state);
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    CRS100MI_ListResult EndCRS100MI_List(IAsyncResult result);

    ...(more operations)
}

CRS100MI_ListResult.cs

[Serializable()]
[XmlSerializerFormat()]
[XmlRoot(ElementName = "CRS100MI_List",DataType = "System.Xml.XmlElement",Namespace = "http://companynamespace")]
public class CRS100MI_ListResult
{
    [XmlElement(Order = 0)]
    public string Result = "";

    [XmlElement(Order = 1)]
    public List<string> Messages = new List<string>();

    [XmlElement(Order = 2)]
    public List<M3Message> ResultMessage = new List<M3Message>();

    [XmlElement(Order = 3)]
    public List<CRS100MI_ListRecordResult> Record = new List<CRS100MI_ListRecordResult>();

    public CRS100MI_ListResult Parse(List<Dictionary<string, string>> list)
    {
        //parses a list of dictionaries to CRS100MI_ListRecordResult
    }
}

[Serializable()]
[XmlSerializerFormat()]
[XmlRoot(ElementName = "CRS100MI_ListRecord", DataType = "System.Xml.XmlElement", Namespace = "http://companynamespace")]
public class CRS100MI_ListRecordResult
{


    [XmlElement(Order = 0)]
    public string Result { get; set; }

    [XmlElement(Order = 1)]
    public string ErrorMessage { get; set; }

    [XmlElement(Order = 2)]
    public List<string> Messages { get; set; }

    [XmlElement(Order = 3)]
    public List<M3Message> ResultMessage { get; set; }

    [XmlElement(Order = 4)]
    public string SMCD { get; set; }

    [XmlElement(Order = 5)]
    public string TX40 { get; set; }

    [XmlElement(Order = 6)]
    public string TX15 { get; set; }

    [XmlElement(Order = 7)]
    public string SDEP { get; set; }

    [XmlElement(Order = 8)]
    public string BUAR { get; set; }

    [XmlElement(Order = 9)]
    public string PWMT { get; set; }

    [XmlElement(Order = 10)]
    public string SHOP { get; set; }

    [XmlElement(Order = 11)]
    public string LOSD { get; set; }


}

当我在我的micro wcf webservice中调用这个核心wcf服务时,我返回结果,它序列化了自动生成的类并给了我

     <getCRS100StuffResult xmlns:a="http://schemas.datacontract.org/2004/07/RA_Tibco.CoreService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:PropertyChanged i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.ComponentModel"/>
        <a:messagesField i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
        <a:recordField>
           <a:CRS100MI_ListRecordResult>
              <a:PropertyChanged i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.ComponentModel"/>
              <a:bUARField i:nil="true"/>
              <a:errorMessageField i:nil="true"/>
              <a:lOSDField>0</a:lOSDField>
              <a:messagesField i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
              <a:pWMTField i:nil="true"/>

在搜索了一下后,我偶然发现了以下StackOverflow问题:Why does WCF sometimes add "Field" to end of generated proxy types?

所以我确保按照给出的说明进行操作,但是在保存之后,重新添加服务引用并将其添加到SOAPUI,它仍然向我提出了这个问题。我究竟做错了什么?

c# xml wcf soap xmlserializer
1个回答
1
投票

仔细观察你的CRS100MI_ListResult.cs,我注意到你不使用DataContractDataMember属性。

使用它们而不是[Serializable()]属性,它应该工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.