如何将XML / JSON文件转换为C#类?

时间:2013-10-26 21:42:29

标签: c# .net xml json

我有 XML 文件,如下所示:

<?xml version="1.0"?>
<catalog>
    <book id="1" date="2012-02-01">
        <title>XML Developer's Guide</title>
        <price>44.95</price>
        <description>
            An in-depth look at creating applications
            with XML.
        </description>
    </book>
    <book id="2" date="2013-10-16">
        <author>Mark Colsberg</author>
        <title>Dolor sit amet</title>
        <price>5.95</price>
        <description>Lorem ipsum</description>
    </book>
</catalog>

如何快速将其转换为C#类以使用LINQ的访问数据? 我是否必须手动为任何XML文件案例编写类? 那么 JSON 格式呢?

XSD是唯一的解决方案吗?

4 个答案:

答案 0 :(得分:58)

你有两种可能性。

方法1. XSD 工具

<小时/> 假设您的XML文件位于此位置C:\path\to\xml\file.xml

  1. 打开开发人员命令提示
    你可以在Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools找到它 或者如果您有Windows 8,只需在开始屏幕
  2. 中键入开发人员命令提示符即可
  3. 通过键入cd /D "C:\path\to\xml"
  4. 将位置更改为XML文件目录
  5. 通过键入xsd file.xml
  6. 从您的xml文件创建 XSD文件
  7. 输入xsd /c file.xsd
  8. 创建 C#类

    就是这样!您已在C:\path\to\xml\file.cs

    中的xml文件中生成了C#类

    方法2 - 粘贴特殊

    <小时/> 必需的Visual Studio 2012 +

    1. 将XML文件的内容复制到剪贴板
    2. 向您的解决方案添加新的空类文件( Shift + Alt + C
    3. 打开该文件,然后在菜单中点击Edit > Paste special > Paste XML As Classes
      enter image description here
    4. 就是这样!

      用法


      使用此助手类非常简单:

      using System;
      using System.IO;
      using System.Web.Script.Serialization; // Add reference: System.Web.Extensions
      using System.Xml;
      using System.Xml.Serialization;
      
      namespace Helpers
      {
          internal static class ParseHelpers
          {
              private static JavaScriptSerializer json;
              private static JavaScriptSerializer JSON { get { return json ?? (json = new JavaScriptSerializer()); } }
      
              public static Stream ToStream(this string @this)
              {
                  var stream = new MemoryStream();
                  var writer = new StreamWriter(stream);
                  writer.Write(@this);
                  writer.Flush();
                  stream.Position = 0;
                  return stream;
              }
      
      
              public static T ParseXML<T>(this string @this) where T : class
              {
                  var reader = XmlReader.Create(@this.Trim().ToStream(), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });
                  return new XmlSerializer(typeof(T)).Deserialize(reader) as T;
              }
      
              public static T ParseJSON<T>(this string @this) where T : class
              {
                  return JSON.Deserialize<T>(@this.Trim());
              }
          }
      }
      

      现在你所要做的就是:

          public class JSONRoot
          {
              public catalog catalog { get; set; }
          }
          // ...
      
          string xml = File.ReadAllText(@"C:\path\to\xml\file.xml");
          var catalog1 = xml.ParseXML<catalog>();
      
          string json = File.ReadAllText(@"C:\path\to\json\file.json");
          var catalog2 = json.ParseJSON<JSONRoot>();
      

      此处您有一些在线XML <--> JSON转换器:Click

答案 1 :(得分:2)

您可以按照这个简单的步骤进行操作

1.Please Add using System.Xml as a reference;
2.Make a class named book in this way



     public class book
            {
                public Nullable<System.DateTime> date{ get; set; }
                public decimal price { get; set; }
                public string title { get; set; }
                public string description { get; set; }
        }

    try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load("Write down full path");
                    XmlNodeList dataNodes = xmlDoc.SelectNodes("/catalog");

                    foreach (XmlNode node in dataNodes)
                    {
                        book objbook = new book();
                     objbook.date=Convert.ToDateTime(node.Attributes["date"].Value);
                       objbook.title=node.SelectSingleNode("title").InnerText;
                   objbook.description=node.SelectSingleNode("description").InnerText;
objbook.price=Convert.ToDecimal(node.SelectSingleNode("price").InnerText);

                    }

                }
catch(Exception ex)
{
throw ex;
}

答案 2 :(得分:0)

使用框架工具中的XML Schema Definition Tool xsd.exe将架构转换为可序列化的类或数据集。

xsd file.xsd {/classes | /dataset} [/element:element]
         [/language:language] [/namespace:namespace]
         [/outputdir:directory] [URI:uri]

在示例中,C#类将在与xsd工具相同的目录中生成:

xsd /c YourFile.xsd

答案 3 :(得分:0)

使用超级简单的方法,使用&#39; 将XML粘贴为类&#39; Visual Studio菜单中的功能

1.复制剪贴板中的xml源代码,例如CTRL + A和CTRL + C

2.转到&#39;编辑&#39;菜单 - &gt;选择性粘贴 - &gt;将XML粘贴为类,以基于源xml&#34;

粘贴生成的类

Ref: More steps in detail at this link