我有 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是唯一的解决方案吗?
答案 0 :(得分:58)
你有两种可能性。
<小时/> 假设您的XML文件位于此位置
C:\path\to\xml\file.xml
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
找到它
或者如果您有Windows 8,只需在开始屏幕cd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
就是这样!您已在C:\path\to\xml\file.cs
<小时/> 必需的Visual Studio 2012 +
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<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;
粘贴生成的类