C#使用XmlSerializer进行XML序列化和反序列化
根据项目需求,需生成非常复杂的XML文件,基本是按照电子病历模板来的,磕磕绊绊的,总算弄出来了,把踩过的坑记录一下。
1、XML序列化的核心——XmlSerializer类的Serialize()方法
2、去除默认命名空间和前缀
XmlSerializer serializer = new XmlSerializer(typeof(ClinicalDocument));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
serializer.Serialize(xmlWriter, param, ns);
3、去除XML声明(即<?xml version="1.0" ?>)
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = true
};
using (StringWriter stringWriter = new StringWriter())
{
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, settings))
{
XmlSerializer serializer = new XmlSerializer(typeof(ClinicalDocument));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
serializer.Serialize(xmlWriter, param, ns);
}
xmlString.Append(stringWriter.ToString());
}
4、换行缩进和指定缩进字符
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
IndentChars = "-",
OmitXmlDeclaration = true
};
5、XmlRoot,定义大节点名称和命名空间
[XmlRoot(ElementName = "ClinicalDocument", Namespace = "urn:hl7-org:v3")]
public class ClinicalDocument
6、XmlElement,指定节点名称
[XmlElement("realmCode")]
public CodeEntity realmCode { get; set; }
7、XmlAttribute,指定属性名称
[XmlAttribute("code")]
public string code { get; set; }
8、XmlText,值
[XmlText]
public string Text { get; set; }
9、XmlArrayItem,数组
[XmlArrayItem]
public CodeEntity[] realmCode { get; set; }
注意,定义不同的特性,序列化的结果是有区别的,一个带数组名称,一个不带数组名称,对比如下:
10、设置xsi:type
定义:
[XmlAttribute(AttributeName = "type", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string type { get; set; }
实例化:
value = new CodeSystemEntity()
{
type="CD",
code="",
displayName="",
codeSystem="2.16.156.10011.2.3.3.11",
codeSystemName="ICD-10"
}
11、XmlEnum,定义枚举
public enum DocStatus
{
[XmlEnum(Name = "Create")]
Create,
[XmlEnum(Name = "Paid")]
paid,
[XmlEnum(Name = "Done")]
done
}
补充:XML的反序列化,对象的定义如上,下面是反序列化的执行代码:
JH0410OutParam outParam = new JH0410OutParam();
XmlSerializer xmlSeriOut = new XmlSerializer(typeof(JH0410OutParam));
using (StringReader reader = new StringReader(serviceResult))
{
outParam = (JH0410OutParam)xmlSeriOut.Deserialize(reader);
}
Done.
分类:
Technology
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix