您需要使用与Windows SDK一起安装的xsd.exe工具进入与以下类似的目录:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
在64位电脑上:
C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\bin
在Windows 10电脑上:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
第一次运行时,使用xsd.exe ,并将示例XML转换为XSD文件(XML模式文件):
xsd yourfile.xml
这给你yourfile.xsd ,在第二步,你可以再次使用xsd.exe转换成C#类:
xsd yourfile.xsd /c
这应该给你一个文件yourfile.cs ,其中将包含一个C#类,你可以用来反序列化你的XML文件 – 如下所示:
XmlSerializer serializer = new XmlSerializer(typeof(msg)); msg resultingMessage = (msg)serializer.Deserialize(new XmlTextReader("yourfile.xml"));
应该在大多数情况下工作得很好。
更新: XML序列化程序将采取任何stream作为其input – 文件或内存stream将罚款:
XmlSerializer serializer = new XmlSerializer(typeof(msg)); MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(inputString)); msg resultingMessage = (msg)serializer.Deserialize(memStream);
或者使用一个StringReader:
XmlSerializer serializer = new XmlSerializer(typeof(msg)); StringReader rdr = new StringReader(inputString); msg resultingMessage = (msg)serializer.Deserialize(rdr);
你有两种可能性。
方法1. XSD工具
假设您的XML文件位于C:\path\to\xml\file.xml
打开开发人员命令提示符
您可以在Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Toolsfind它或者如果您有Windows 8,只需在开始屏幕中inputDeveloper Command Prompt
通过inputcd /D "C:\path\to\xml"位置更改为XML文件目录
通过键入xsd file.xml从xml文件创buildXSD文件
通过键入xsd /c file.xsd创buildC#类
而就是这样! 您已经从C:\path\to\xml\file.cs xml文件生成了C#类C:\path\to\xml\file.cs
方法2 – 特殊粘贴
所需的Visual Studio 2012+与.Net框架> = 4.5作为项目的目标
将XML文件的内容复制到剪贴板
添加到您的解决scheme新的空的类文件( 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(@"D:\file.xml"); var catalog1 = xml.ParseXML(); string json = File.ReadAllText(@"D:\file.json"); var catalog2 = json.ParseJSON();
尝试使用此方法将Xml转换为对象。 这是为了你正在做什么:
protected T FromXml(String xml) { T returnedXmlClass = default(T); try { using (TextReader reader = new StringReader(xml)) { try { returnedXmlClass = (T)new XmlSerializer(typeof(T)).Deserialize(reader); } catch (InvalidOperationException) { // String passed is not XML, simply return defaultXmlClass } } } catch (Exception ex) { } return returnedXmlClass ; }
使用以下代码调用它:
YourStrongTypedEntity entity = FromXml(YourMsgString);
简单地运行你的Visual Studio 2013作为pipe理…复制你的Xml文件的内容..转到Visual Studio 2013>编辑>select性粘贴>将Xml粘贴为C#类它将根据您的Xml文件内容创build您的C#类。
以防万一任何人可能会觉得这有用:
public static class XmlConvert { public static string SerializeObject(T dataObject) { if (dataObject == null) { return string.Empty; } try { using (StringWriter stringWriter = new System.IO.StringWriter()) { var serializer = new XmlSerializer(typeof(T)); serializer.Serialize(stringWriter, dataObject); return stringWriter.ToString(); } } catch (Exception ex) { return string.Empty; } } public static T DeserializeObject(string xml) where T : new() { if (string.IsNullOrEmpty(xml)) { return new T(); } try { using (var stringReader = new StringReader(xml)) { var serializer = new XmlSerializer(typeof(T)); return (T)serializer.Deserialize(stringReader); } } catch (Exception ex) { return new T(); } } }
您可以使用xsd.exe在.Net中创build模式绑定类,然后使用XmlSerializer来反序列化string: http : //msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlserializer.deserialize.aspx
如果您有xml消息的xsd,那么您可以使用.Net xsd.exe工具生成c#类。
这个.Net类可以用来生成xml。
除了这里的其他答案之外,您自然可以使用XmlDocument类(用于XML DOM类阅读)或XmlReader (快速前向阅读器)来“手动”。
你可以像上面描述的那样生成类,或者手动编写它们:
[XmlRoot("msg")] public class Message { [XmlElement("id")] public string Id { get; set; } [XmlElement("action")] public string Action { get; set; } }
然后你可以使用ExtendedXmlSerializer来序列化和反序列化。
Instalation您可以从nuget安装ExtendedXmlSerializer或运行以下命令:
Install-Package ExtendedXmlSerializer
连载:
ExtendedXmlSerializer serializer = new ExtendedXmlSerializer(); var obj = new Message(); var xml = serializer.Serialize(obj);
反序列化
var obj2 = serializer.Deserialize(xml);
这个串行器支持:
从标准的XMLSerializer反序列化XML
序列化类,结构体,generics类,基元types,generics列表和字典,数组,枚举
具有属性接口的序列化类
序列化循环引用和引用Id
旧版本的xml的反序列化
属性encryption
自定义序列化器
支持XmlElementAttribute和XmlRootAttribute
POCO – 所有configuration(迁移,自定义序列化…)都在课程之外
ExtendedXmlSerializer支持.NET 4.5或更高版本和.NET Core 。 您可以将其与WebApi和AspCore集成。
public string Serialize(T settings) { XmlSerializer serializer = new XmlSerializer(typeof(T)); StringWriter outStream = new StringWriter(); serializer.Serialize(outStream, settings); return outStream.ToString(); }