WCF运用XML序列化接口通讯
最近客户那里提出要用RESTful服务,并且指明要用标准的XML形式进行数据传输。
那么在WCF这个开发平台下,如何实现呢?WCF默认采用DataContract形式序列化,即不管你的服务接口上有没有使用DataContract序列化属性,WCF都是使用这个序列化属性的。如果想使用XML形式序列化。那么就要在服务接口上添加[XmlSerializerFormat]这个属性。例如以下代码:
// 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。
[ServiceContract]
[XmlSerializerFormat]
public interface IVisitCostService
{
}
[ServiceContract]
[XmlSerializerFormat]
public interface IVisitCostService
{
}
另外,在你的数据契约上也要添加[Serializable]属性,并且相关字段也要有[XmlArray]、[XmlArrayItem]属性。例如以下代码:
[Serializable]
[XmlType(AnonymousType = false)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class VisitCostRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="VisitCostRequest"/> class.
/// </summary>
public VisitCostRequest()
{
CountryCodes = new Collection<string>();
}
/// <summary>
/// Gets or sets the Countries list
/// </summary>
[XmlArray("Country")]
[XmlArrayItem("Code")]
//[DataMember(Name = "CountryCodes")]
public Collection<string> CountryCodes { get; set; }
}
[XmlType(AnonymousType = false)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class VisitCostRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="VisitCostRequest"/> class.
/// </summary>
public VisitCostRequest()
{
CountryCodes = new Collection<string>();
}
/// <summary>
/// Gets or sets the Countries list
/// </summary>
[XmlArray("Country")]
[XmlArrayItem("Code")]
//[DataMember(Name = "CountryCodes")]
public Collection<string> CountryCodes { get; set; }
}
这样一来,由WCF形成的RESTful web service就可以用标准的XML格式与任意调用的客户端进行通讯了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 并发编程 - 线程同步(二)