wpf xml 转化对象_将XMLstring转换为对象

本文介绍了如何使用xsd.exe工具将XML文件转换为XSD,再将XSD转换为C#类,以便进行XML反序列化。还提供了在Visual Studio中通过编辑>特殊粘贴>粘贴XML为类的方法,以及使用ExtendedXmlSerializer库进行序列化和反序列化的示例。
摘要由CSDN通过智能技术生成

您需要使用与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(); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值