如何将自定义XML处理指令映射至CLR类型?
自定义XML处理指令到CLR类型的映射方案
XML中的<?code MySimpleCode?>属于XML处理指令(Processing Instruction),可以通过.NET的XmlSerializer直接映射到CLR类型,以下是两种可行的实现方式:
方式一:完整映射处理指令(保留目标名和内容)
使用.NET内置的XmlProcessingInstruction类型配合XmlProcessingInstructionAttribute特性,完整保留处理指令的所有信息:
[XmlRoot(ElementName = "root")] public class Root { // 特性参数需与处理指令的目标名(<?code ...?>中的"code")完全一致 [XmlProcessingInstruction("code")] public XmlProcessingInstruction Code { get; set; } }
XmlProcessingInstruction类型包含两个核心属性:Target:对应处理指令的目标名(示例中为code)Data:对应处理指令的内容(示例中为MySimpleCode)
方式二:仅映射处理指令内容(简化版)
如果只需要获取处理指令的内容部分,可以直接使用string类型,特性仍使用XmlProcessingInstructionAttribute:
[XmlRoot(ElementName = "root")] public class Root { [XmlProcessingInstruction("code")] public string CodeContent { get; set; } }
这种情况下,CodeContent属性的值会直接对应MySimpleCode,无需额外解析。
反序列化示例
以第一种方式为例,反序列化给定XML的代码如下:
var xmlContent = @"<?xml version=""1.0"" encoding=""UTF-8""?> <root> <?code MySimpleCode?> </root>"; var serializer = new XmlSerializer(typeof(Root)); using var stringReader = new StringReader(xmlContent); var rootObj = (Root)serializer.Deserialize(stringReader); // 输出处理指令的目标名和内容 Console.WriteLine(rootObj.Code.Target); // 输出: code Console.WriteLine(rootObj.Code.Data); // 输出: MySimpleCode
内容的提问来源于stack exchange,提问作者Ruslan Kudaybergenov
相关产品推荐
相关产品推荐

