将 XML 转换为 c# 对象

Posted

技术标签:

【中文标题】将 XML 转换为 c# 对象【英文标题】:Converting XML into a c# object 【发布时间】:2013-02-21 19:20:03 【问题描述】:

我正在尝试创建一个类,该类从目录中获取一个小的 xml 文件并将其变成一个对象,但我总是遇到属性问题。我希望班级有一个维度列表,以便可以将其称为。维度[x].id、维度[x].name....等。该类将被多次引用,但我希望它仅在第一次将 xml 填充到对象中。

这是 XML,在 Advanced 中感谢您:

    <?xml version="1.0"?>
     <dimensions>
      <dimensions id="0" name="Test"  serverAddress = "cm.dt.funcom.com" port = "7509" />
      <dimensions id="1" name="Atlantean"  serverAddress = "cm.d1.funcom.com" port = "7501" />
      <dimensions id="2" name="Rimor"  serverAddress = "cm.d2.funcom.com" port = "7502" />
     </dimensions>

【问题讨论】:

你试过什么?你在哪里看的?在 *** 搜索框中输入“将 XML 转换为 C# 对象”会发生什么? 正如我上面提到的,我的属性有问题。如果不是属性,我可以很容易地对它进行反序列化。最近太习惯json了 请参阅这篇关于“如何正确实现 IXmlSerializable”的帖子***.com/questions/5590592/… 但是您的确切“属性问题”是什么? 我的问题是无法将它们正确序列化为对象。我不习惯多个属性 【参考方案1】:

我会尝试一些可以消除属性焦虑的方法。

生成(或使用现有的)适用于您的 XML 的 XSD。像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="dimensions">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="dimensions">
          <xsd:complexType>
            <xsd:attribute name="id" type="xsd:unsignedByte" use="required" />
            <xsd:attribute name="name" type="xsd:string" use="required" />
            <xsd:attribute name="serverAddress" type="xsd:string" use="required" />
            <xsd:attribute name="port" type="xsd:unsignedShort" use="required" />
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

使用 .NET 提供的 xsd.exe 工具(Visual Studio 命令提示符会很好地为您设置路径)生成类(假设上述 XSD 保存为 converting-xml-into-a-c-sharp-object.xsd):

xsd /c <fullpath-if-not-in-the-current-folder>converting-xml-into-a-c-sharp-object.xsd

生成的代码类似于(只是标题):

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.17929
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// This source code was auto-generated by xsd, Version=4.0.30319.1.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class dimensions 

    private dimensionsDimensions[] dimensions1Field;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("dimensions")]
    public dimensionsDimensions[] dimensions1 
        get 
            return this.dimensions1Field;
        
        set 
            this.dimensions1Field = value;
        
    

下一步是编写引用这个生成的类的代码;您可以找到很多参考资料;介绍可以是this on SO。

上面的 XSD(“Russian Doll”)创作风格给看起来不聪明的类命名; here 是一种可能的解决方法。

【讨论】:

谢谢 :) 那是一大堆帮助!

以上是关于将 XML 转换为 c# 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套列表将 XML 文件转换为 C# 对象

将 XML 字符串 API 响应转换为键值对象 C#

如何使用c#将xml字符串转换为对象

将 XML 转换为 C# 类的工具 [重复]

XmlSerializer C# - 对象传递的简单值被转换并显示为 xml 文件中的科学值

如何在c#中将XML转换为自定义对象[重复]