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

我有这样的XML文件:

   XML Developer's Guide 44.95  An in-depth look at creating applications with XML.    Mark Colsberg Dolor sit amet 5.95 Lorem ipsum   

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

XSD是唯一的解决方案吗?

你有两种可能性。

方法1. XSD工具


假设您的XML文件位于此位置C:\path\to\xml\file.xml

  1. 打开开发人员命令提示符
    您可以在“ Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools找到它。或者,如果您有Windows 8,则可以在“ 开始”屏幕中键入Developer Command Prompt
  2. 通过键入cd /D "C:\path\to\xml"位置更改为XML文件目录
  3. 通过键入xsd file.xml从xml文件创建XSD文件
  4. 键入xsd /c file.xsd创建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
    在此处输入图像描述

就是这样!

用法


这个助手类的用法非常简单:

 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(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(this string @this) where T : class { return JSON.Deserialize(@this.Trim()); } } } 

你现在要做的就是:

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

这里有一些在线XML <--> JSON转换器: 点击

您可以按照这个简单的步骤

 1.Please Add using System.Xml as a reference; 2.Make a class named book in this way public class book { public Nullable 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; } 

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

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

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

 xsd /c YourFile.xsd 

使用Visual Studio菜单中的粘贴XML作为类 ”function的超级简单方法

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

2.转到“编辑”菜单 – >选择性粘贴 – >粘贴XML作为类,以基于源xml粘贴生成的类“

参考:此链接详细介绍了更多步骤