C#的DataContractSerializer怎么用 WCF数据契约


DataContractSerializer 是 WCF 中配合 [DataContract] 和 [DataMember] 特性实现数据序列化与反序列化的核心类,要求显式标记可序列化成员,支持命名空间、顺序、默认值控制及多态扩展。

c#的datacontractserializer怎么用 wcf数据契约

DataContractSerializer 是 WCF 中用于序列化和反序列化数据的核心类,专门配合 [DataContract][DataMember] 特性使用,确保类型能被 WCF 正确传输和解析。

定义可序列化的数据契约

[DataContract] 标记类,用 [DataMember] 标记需要参与序列化的字段或属性。不加 [DataMember] 的成员默认不序列化(包括 public 字段)。

示例:

[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Age { get; set; }

    // 这个不会被序列化
    public string InternalNote { get; set; }

    // 可选:指定名称、顺序、是否必需、是否应忽略
    [DataMember(Name = "ID", Order = 0, IsRequired = true, EmitDefaultValue = false)]
    public int PersonId { get; set; }
}

用 DataContractSerializer 序列化对象到 XML

创建 DataContractSerializer 实例时传入类型;用 WriteObject 写入流(如 MemoryStream 或文件流)。

西语写作助手 西语写作助手

西语助手旗下的AI智能写作平台,支持西语语法纠错润色、论文批改写作

西语写作助手 21 查看详情 西语写作助手
  • 必须确保类型已标记 [DataContract],否则抛出异常
  • 推荐显式指定命名空间(如 "http://mycompany.com/person"),避免默认命名空间导致互操作问题
  • 若需格式化输出(带缩进),可传入 XmlWriterSettings
var person = new Person { Name = "Alice", Age = 30, PersonId = 101 };

var serializer = new DataContractSerializer(typeof(Person), 
    new DataContractSerializerSettings { 
        PreserveObjectReferences = true // 如需处理循环引用,设为 true
    });

using var stream = new MemoryStream();
using (var writer = XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8))
{
    serializer.WriteObject(writer, person);
}
string xml = Encoding.UTF8.GetString(stream.ToArray());

从 XML 反序列化回对象

ReadObject 方法从流中读取并还原对象。注意流位置需在开头,且 XML 结构必须与契约严格匹配(命名空间、元素名、嵌套层级)。

  • 如果 XML 含未知元素,默认会跳过;可通过 DataContractSerializerSettings.KnownTypes 添加派生类型支持多态
  • 反序列化失败通常因命名空间不一致、元素名拼写错误或类型不匹配,建议先用 XmlDictionaryReader 检查原始 XML
  • 若服务端返回的是带 Envelope 的 SOAP 响应,不能直接用 DataContractSerializer 解析 —— 它只处理纯数据部分
var xmlBytes = Encoding.UTF8.GetBytes(xml);
using var stream = new MemoryStream(xmlBytes);
using (var reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderSettings()))
{
    var deserialized = (Person)serializer.ReadObject(reader);
}

常见注意事项

WCF 默认使用 DataContractSerializer,但你也可以在绑定或行为中替换为 XmlSerializer(需手动配置)。实际开发中要注意:

  • [DataMember]EmitDefaultValue 设为 false 可让值为默认值(如 0、null)的字段不出现在 XML 中
  • 集合类型推荐用 List<t></t> 或数组;自定义集合需实现 IList 并标记 [CollectionDataContract]
  • 枚举默认按名称序列化;加 [EnumMember] 可控制别名,或用 [DataContract] + [EnumMember] 禁用未标记项
  • 不要在数据契约中放方法、事件、非公共字段(除非显式标记 [DataMember] 且为 public set)

以上就是C#的DataContractSerializer怎么用 WCF数据契约的详细内容,更多请关注其它相关文章!


# c#  # 格式化输出  # red  # 序列化  # stream  # 中文网  # 广州SEO公司智云网络  # 盐池农产品网站模板建设  # 自定义  # 相关文章  # 不出  # 流式  # 的是  # 默认值  # 设为  # 多态  # 营销推广节奏怎么写文案  # 兰州网站高端建设项目  # 朔州营销型网站建设  # 山东鹤壁网站优化排名  # 武汉seo公司乚标兵seo效果  # 实用新型网站建设  # 营销推广平台联系人  # 免费ai seo文案 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  发博客与长微博技巧  J*aScript二进制处理_ArrayBuffer与Blob  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  QQ网页版入口导航 QQ网页版在线访问通道  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  红手指专业版app注册教程  PHP中获取HTTP响应状态消息:方法与限制  《下一站江湖2》风神腿获取攻略  风车动漫官网首页入口登录 风车动漫在线观看正版地址  J*a中导出MySQL表为SQL脚本的两种方法  手机远程连接电脑方法  惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置  《tt语音》超级玩家开通方法  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  多闪电脑版下载_多闪PC端模拟器使用  《荔枝fm》导出文件教程  iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  《异星探险家》古怪的物品作用介绍  秋风萧瑟洪波涌起中的萧瑟指的是什么  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  《盗墓笔记手游》技能介绍  路由器DNS怎么设置最快 优化DNS提升上网速度教程  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  Retrofit根路径POST请求:@POST("/") 的应用与解析  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  抖音视频如何添加标题?添加标题有哪些好处?  悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口  铁拳8在线玩 铁拳8在线秒玩入口  《大学搜题酱》官网地址登录  驱动人生:游戏修复指南  word文档行距怎么调?word文档调行距的操作步骤  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  Three.js中动态更换3D模型纹理的教程  win11关机几秒又自己开机 Win11关机自动重启问题修复  追剧达人如何发弹幕  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  海外搜索引擎推广效果怎么样,怎么分析效果!  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  国际经济与贸易就业方向解析  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  PHP安全加载非公开目录图片与动态内容类型处理指南  J*aScript与HTML元素交互:图片点击事件与链接处理教程  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.