WCF 自动生成 类 是使用字段后缀创建的,即使我使用的是 XmlSerializer
WCF auto generated classes are created with field suffixes even though I am using XmlSerializer
我有一个核心服务和一个微服务。微服务引用核心 WCF 服务。当我添加引用时,references.cs
包含 classes,我的私有属性公开为 public,并且我的所有属性都有一个字段后缀
例如:
public string SMCD { get; set; }
成为
private string sMCDField;
以下是我参考的 classes:
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; }
}
当我在我的微型 wcf web 服务中调用这个核心 wcf 服务时,我 return 结果它序列化自动生成的 class 并给我
<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"/>
经过一番搜索后,我无意中发现了以下 Whosebug 问题:
Why does WCF sometimes add "Field" to end of generated proxy types?
所以我确保按照给出的说明进行操作,但是在保存、重新添加服务引用并将其添加到 SOAPUI 之后,它仍然向我展示了这个问题。我做错了什么?
仔细查看你的 CRS100MI_ListResult.cs
我注意到你没有使用 DataContract
和 DataMember
属性。
使用它们代替 [Serializable()]
属性,它应该可以正常工作。
我有一个核心服务和一个微服务。微服务引用核心 WCF 服务。当我添加引用时,references.cs
包含 classes,我的私有属性公开为 public,并且我的所有属性都有一个字段后缀
例如:
public string SMCD { get; set; }
成为
private string sMCDField;
以下是我参考的 classes:
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; }
}
当我在我的微型 wcf web 服务中调用这个核心 wcf 服务时,我 return 结果它序列化自动生成的 class 并给我
<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"/>
经过一番搜索后,我无意中发现了以下 Whosebug 问题: Why does WCF sometimes add "Field" to end of generated proxy types?
所以我确保按照给出的说明进行操作,但是在保存、重新添加服务引用并将其添加到 SOAPUI 之后,它仍然向我展示了这个问题。我做错了什么?
仔细查看你的 CRS100MI_ListResult.cs
我注意到你没有使用 DataContract
和 DataMember
属性。
使用它们代替 [Serializable()]
属性,它应该可以正常工作。