猿问

将XML String转换为Object

将XML String转换为Object

我通过套接字接收XML字符串,并希望将它们转换为C#对象。

消息的形式如下:

<msg>
   <id>1</id>
   <action>stop</action></msg>

我是.Net的新手,并不确定执行此操作的最佳做法。我之前使用过JAXB for Java,并且不确定是否有类似的东西,或者是否会以不同的方式处理。


慕慕森
浏览 1218回答 3
3回答

FFIVE

您需要使用xsd.exe随Windows SDK安装的工具进入类似于以下目录的目录:C:\Program&nbsp;Files\Microsoft&nbsp;SDKs\Windows\v6.0A\bin在64位计算机上:C:\Program&nbsp;Files&nbsp;(x86)\Microsoft&nbsp;SDKs\Windows\v6.0A\bin在Windows 10计算机上:C:\Program&nbsp;Files&nbsp;(x86)\Microsoft&nbsp;SDKs\Windows\v7.0A\bin在第一次运行时,您使用xsd.exe并将示例XML转换为XSD文件(XML架构文件):xsd&nbsp;yourfile.xml这样yourfile.xsd,您可以在第二步中再次使用xsd.exeC#类进行转换:xsd&nbsp;yourfile.xsd&nbsp;/c这应该为您提供一个文件yourfile.cs,其中包含一个C#类,您可以使用它来反序列化您正在获取的XML文件 - 例如:XmlSerializer&nbsp;serializer&nbsp;=&nbsp;new&nbsp;XmlSerializer(typeof(msg));msg&nbsp;resultingMessage&nbsp;=&nbsp;(msg)serializer.Deserialize(new&nbsp;XmlTextReader("yourfile.xml"));对大多数情况应该很好。更新:&nbsp;XML序列化程序将任何流作为其输入 - 文件或内存流都可以:XmlSerializer&nbsp;serializer&nbsp;=&nbsp;new&nbsp;XmlSerializer(typeof(msg));MemoryStream&nbsp;memStream&nbsp;=&nbsp;new&nbsp;MemoryStream(Encoding.UTF8.GetBytes(inputString));msg&nbsp;resultingMessage&nbsp;=&nbsp;(msg)serializer.Deserialize(memStream);或使用StringReader:XmlSerializer&nbsp;serializer&nbsp;=&nbsp;new&nbsp;XmlSerializer(typeof(msg));StringReader&nbsp;rdr&nbsp;=&nbsp;new&nbsp;StringReader(inputString);msg&nbsp;resultingMessage&nbsp;=&nbsp;(msg)serializer.Deserialize(rdr);

临摹微笑

尝试使用此方法将Xml转换为对象。这是为了你正在做的事情:protected&nbsp;T&nbsp;FromXml<T>(String&nbsp;xml){ &nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;returnedXmlClass&nbsp;=&nbsp;default(T); &nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(TextReader&nbsp;reader&nbsp;=&nbsp;new&nbsp;StringReader(xml)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returnedXmlClass&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(T)new&nbsp;XmlSerializer(typeof(T)).Deserialize(reader); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(InvalidOperationException) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;String&nbsp;passed&nbsp;is&nbsp;not&nbsp;XML,&nbsp;simply&nbsp;return&nbsp;defaultXmlClass &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;ex) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;returnedXmlClass&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}使用以下代码调用它:YourStrongTypedEntity&nbsp;entity&nbsp;=&nbsp;FromXml<YourStrongTypedEntity>(YourMsgString);
随时随地看视频慕课网APP
我要回答