c# - WCF 自动生成的类是使用字段后缀创建的,即使我使用的是 XmlSerializer
问题描述
我有一个核心服务和一个微服务。微服务引用核心 WCF 服务。当我添加引用时,references.cs
包含我的私有属性公开为公共的类,并且在我的所有属性上都有一个字段后缀
例如:
public string SMCD { get; set; }
变成
private string sMCDField;
以下是我引用的类:
核心接口.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 问题: 为什么 WCF 有时会在生成的代理类型的末尾添加“字段”?
所以我确保按照给出的说明进行操作,但是在保存、重新添加服务引用并将其添加到 SOAPUI 之后,它仍然会出现这个问题。我究竟做错了什么?
解决方案
通过你的仔细查看CRS100MI_ListResult.cs
我注意到你没有使用DataContract
和DataMember
属性。
使用它们而不是[Serializable()]
属性,它应该可以正常工作。
推荐阅读
- amazon-ec2 - Packer shell 配置程序在自定义 ami 上失败
- python-3.x - 如何比较两个字典“偶数触发器”的值
- html - 水平居中 div
- .net-core - 如何在一组项目中找到未使用的代码?
- java - 在返回多行的 jdbc 模板中调用存储过程
- r - 如何计算二进制模式
- java - 如何将 javaFX Menubutton 文本设置为选定的 menuItem 文本
- android - 通过 ViewPager 中的 Fragments 拥有多个 ViewModel 实例
- sql - 想在第2次遇到特殊角色后得到所有
- istio - 为什么在 Istio 中使用 mTLS 转发上一个请求的 Host Header 会返回 500?