将XML字符串转换为对象

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

这些信息的形式如下:

<味精>
<id>1&lt/id>
<行动>停止&lt/行动>
&lt/味精>

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

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

C:\Program Files\Microsoft SDK\Windows\v6.0A\bin

在64位计算机上:

C:\ProgramFiles(x86)\Microsoft SDK\Windows\v6.0A\bin

在Windows 10计算机上:

C:\ProgramFiles(x86)\Microsoft SDK\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=新的XmlSerializer(typeof(msg));
msg resultingMessage=(msg)serializer.Deserialize(新的XmlTextReader(“yourfile.xml”);

在大多数情况下都能很好地工作

更新:XML序列化程序将采用任何流作为其输入-文件或内存流都可以:

XmlSerializer serializer=新的XmlSerializer(typeof(msg));
MemoryStream memStream=新的MemoryStream(Encoding.UTF8.GetBytes(inputString));
msg resultingMessage=(msg)序列化程序。反序列化(memStream);

或者使用StringReader:

XmlSerializer serializer=新的XmlSerializer(typeof(msg));
StringReader rdr=新StringReader(inputString);
msg resultingMessage=(msg)序列化程序。反序列化(rdr);

发表评论