Ответ 1
У вас есть две возможности.
Метод 1. Инструмент XSD
Предположим, что у вас есть ваш XML файл в этом месте
C:\path\to\xml\file.xml
- Откройте Командная строка разработчика
Вы можете найти его вStart Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Или, если у вас есть Windows 8, можно просто начать набирать Командная строка разработчика на экране запуска - Измените местоположение в каталоге файла XML, набрав
cd /D "C:\path\to\xml"
- Создайте XSD файл из вашего xml файла, набрав
xsd file.xml
- Создайте классы С#, набрав
xsd /c file.xsd
И это! Вы создали классы С# из XML файла в C:\path\to\xml\file.cs
Способ 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<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
: Нажмите