Como converter o ficheiro XML/JSON para Classe C#?
Tenho XML um ficheiro como este:
<?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>
Como converter rapidamente para classes C# para usar dados de acesso pelo LINQ? Tenho de escrever a classe manualmente para algum ficheiro XML? E quanto ao formatoJSON ?
o XSD é a única solução?
4 answers
Método 1. XSD tool
Suponha que tem o seu ficheiro XML nesta localização
C:\path\to\xml\file.xml
- Abrir A Linha De Comandos Do Programador
Você pode encontrá-lo emStart Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Ou se tiver o Windows 8 pode começar a escrever a linha de comandos do programador em o ecrã inicial - mude a localização para a sua pasta de ficheiros XML, escrevendo
cd /D "C:\path\to\xml"
- criar ficheiro XSD a partir do seu ficheiro ficheiro xml ao escrever
xsd file.xml
- criar C # classes escrevendo
xsd /c file.xsd
C:\path\to\xml\file.cs
Método 2-pasta especial
Estúdio Visual Necessário 2012+
- copiar o conteúdo do seu ficheiro XML para a área de transferência
- Adicionar à sua solução um ficheiro de classe novo e vazio ( Shift+Alt+C)
- abra esse ficheiro e carregue no menu
Edit > Paste special > Paste XML As Classes
Utilização
O uso é muito simples com esta classe auxiliar:
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());
}
}
}
Tudo o que tens de fazer agora, é:
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>();
Aqui você tem alguns conversores Online XML <--> JSON
: Clique
Pode seguir este passo simples
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;
}
Usar a Ferramenta de definição do esquema de XML xsd.exe
encontrado em suas ferramentas de framework para converter seu esquema em uma classe ou conjunto de dados serializável.
xsd file.xsd {/classes | /dataset} [/element:element]
[/language:language] [/namespace:namespace]
[/outputdir:directory] [URI:uri]
E, por exemplo, considerando que a Classe C# será gerada na mesma pasta que a ferramenta xsd:
xsd /c YourFile.xsd
Usar a forma super simples usando a funcionalidade 'Colar XML como Classes ' no menu Visual studio.
1.copiar o código xml na área de transferência, algo como CTRL+A e CTRL+C
2.Ir para o Menu 'Editar' - > Colar especial - > colar XML como Classes, para colar as classes geradas com base no xml de código "