将带有点 (.) 的 XML 标记映射到 C# 对象

我有一些带有点(。)的标签的 XML 文件,现在我正在使用“StringWriter”用 C# 映射 XML 数据,但我无法处理标签名称中带有点(。)的 XML 标签,例如:-” Customer.Name”,我如何将其映射到 C# 类。我已经用我的类模型给了 XmlElement,但我仍然没有用我的类获得值映射。


任何人都可以给我建议。


[XmlElement(ElementName = "PARENTNAME")]   

public string PARENTNAME { get; set; }  //This is perfect mapped

[XmlElement(ElementName = "DISPLAYCONTACT.CONTACTNAME")]

public string DISPLAYCONTACTCONTACTNAME { get; set; } // This is not mapped

[XmlElement(ElementName = "DISPLAYCONTACT.COMPANYNAME")]

public string DISPLAYCONTACTCOMPANYNAME { get; set; }

将 XML 转换为 C#


XmlDocument doc = new XmlDocument();

doc.LoadXml(custome‌rString);

StringWriter sw = new StringWriter();

XmlTextWriter xw = new XmlTextWriter(sw);

doc.WriteTo(xw);

String XmlString = sw.ToString();

string xmlToJson = JsonConvert.SerializeXmlNode(doc);

var deserialized = JsonConvert.SerializeXmlNode(doc);

var custome‌r = new CusGetResIn();

custome‌r= JsonConvert.DeserializeObject<CusGetResIn>(deserialized);

也试过: -


XmlSerializer serializer = new XmlSerializer(typeof(CusGetResIn));

MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(XmlString));

CusGetResIn resultingMessage = (CusGetResIn)serializer.Deserialize(memStream);


拉丁的传说
浏览 155回答 2
2回答

精慕HU

快速测试节目XmlSerializer可以很容易地处理这个问题测试类:[XmlRoot]public class Test{&nbsp; &nbsp; [XmlElement(ElementName="Foo.Alpha")]&nbsp; &nbsp; public string Alpha {get;set;}&nbsp; &nbsp; [XmlElement(ElementName="Foo.Beta")]&nbsp; &nbsp; public string Beta {get;set;}}示例方法:private static void Main(){&nbsp; &nbsp; var src = @"<Test>&nbsp; &nbsp; <Foo.Alpha>value 1</Foo.Alpha>&nbsp; &nbsp; <Foo.Beta>value 2</Foo.Beta>&nbsp; &nbsp; </Test>";&nbsp; &nbsp; using (var sreader = new StringReader(src))&nbsp; &nbsp; using (var reader = XmlReader.Create(sreader))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var serializer = new XmlSerializer(typeof(Test));&nbsp; &nbsp; &nbsp; &nbsp; var test = (Test)serializer.Deserialize(reader);&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(test.Alpha);&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(test.Beta);&nbsp; &nbsp; }}更新:由于您正在处理的 XML 文档非常大,您应该考虑您实际需要做什么。如果您需要将整个文档作为对象进行操作,那么 JP Hellemons 的答案中采用的方法可能是可行的方法。如果您只对某些字段感兴趣,那么最好将 XML 加载到XDocumentorXmlDocument中并从中提取您感兴趣的字段,或者甚至编写一个只进的解析器XmlReader来做同样的事情。

BIG阳

我已将您的 XML 粘贴到XMLFile1.xml中并将其粘贴到 Visual Studio 中以生成类,因此这将是很多自动生成的代码...警告不适合自动生成代码...正文限制为 30000 个字符;你输入了 93977完整代码在这里: https ://pastebin.com/VxzNUjsv较小的版本:<?xml version="1.0" encoding="UTF-8"?><customer>&nbsp; <RECORDNO>5</RECORDNO>&nbsp; <CUSTOMERID>CUST-00101</CUSTOMERID>&nbsp; <PARENTNAME>parent</PARENTNAME>&nbsp; <DISPLAYCONTACT.CONTACTNAME>Sun Microsystems - EBC(CCUST-00101)</DISPLAYCONTACT.CONTACTNAME>&nbsp; <DISPLAYCONTACT.COMPANYNAME>Sun Microsystems - EBC</DISPLAYCONTACT.COMPANYNAME></customer>和 C# 代码:class Program&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; using (var sreader = new StringReader(File.ReadAllText(@"C:\Users\JP\source\repos\soXmlParsing\soXmlParsing\XMLFile1.xml")))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; using (var reader = XmlReader.Create(sreader))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var serializer = new XmlSerializer(typeof(customer));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var test = (customer)serializer.Deserialize(reader);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(test.PARENTNAME);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(test.DISPLAYCONTACTCONTACTNAME);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; // NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.&nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; [System.SerializableAttribute()]&nbsp; &nbsp; [System.ComponentModel.DesignerCategoryAttribute("code")]&nbsp; &nbsp; [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]&nbsp; &nbsp; [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]&nbsp; &nbsp; public partial class customer&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; private byte rECORDNOField;&nbsp; &nbsp; &nbsp; &nbsp; private string cUSTOMERIDField;&nbsp; &nbsp; &nbsp; &nbsp; private string pARENTNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; private string dISPLAYCONTACTCONTACTNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; private string dISPLAYCONTACTCOMPANYNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; &nbsp; &nbsp; public byte RECORDNO&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.rECORDNOField;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.rECORDNOField = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; &nbsp; &nbsp; public string CUSTOMERID&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.cUSTOMERIDField;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.cUSTOMERIDField = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; &nbsp; &nbsp; public string PARENTNAME&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.pARENTNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.pARENTNAMEField = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; &nbsp; &nbsp; [System.Xml.Serialization.XmlElementAttribute("DISPLAYCONTACT.CONTACTNAME")]&nbsp; &nbsp; &nbsp; &nbsp; public string DISPLAYCONTACTCONTACTNAME&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.dISPLAYCONTACTCONTACTNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.dISPLAYCONTACTCONTACTNAMEField = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; /// <remarks/>&nbsp; &nbsp; &nbsp; &nbsp; [System.Xml.Serialization.XmlElementAttribute("DISPLAYCONTACT.COMPANYNAME")]&nbsp; &nbsp; &nbsp; &nbsp; public string DISPLAYCONTACTCOMPANYNAME&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.dISPLAYCONTACTCOMPANYNAMEField;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.dISPLAYCONTACTCOMPANYNAMEField = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP