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

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 实例时传入类型;用 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());
用 ReadObject 方法从流中读取并还原对象。注意流位置需在开头,且 XML 结构必须与契约严格匹配(命名空间、元素名、嵌套层级)。
DataContractSerializerSettings.KnownTypes 添加派生类型
支持多态XmlDictionaryReader 检查原始 XML
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
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。