如何将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
- 打开开发人员命令提示符
您可以在“Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
找到它。或者,如果您有Windows 8,则可以在“ 开始”屏幕中键入Developer Command Prompt - 通过键入
cd /D "C:\path\to\xml"
位置更改为XML文件目录 - 通过键入
xsd file.xml
从xml文件创建XSD文件 - 键入
xsd /c file.xsd
创建C#类
就是这样! 您已从C:\path\to\xml\file.cs
xml文件生成C#类
方法2 – 粘贴特殊
必需的Visual Studio 2012+
- 将XML文件的内容复制到剪贴板
- 添加到您的解决方案新的空类文件( Shift + Alt + C )
- 打开该文件,然后在菜单中单击
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粘贴生成的类“
参考:此链接详细介绍了更多步骤