小编典典

将 XML 字符串转换为对象

all

我正在通过套接字接收 XML 字符串,并希望将这些字符串转换为 C# 对象。

消息的形式为:

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

如何才能做到这一点?


阅读 85

收藏
2022-06-28

共1个答案

小编典典

您需要使用xsd.exe与 Windows SDK 一起安装的工具到类似于以下内容的目录中:

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 序列化程序将任何流作为其输入 - 文件或内存流都可以:

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);
2022-06-28