为了账号安全,请及时绑定邮箱和手机立即绑定

将XML String转换为Object

将XML String转换为Object

慕慕森 2019-07-23 17:48:22
将XML String转换为Object我通过套接字接收XML字符串,并希望将它们转换为C#对象。消息的形式如下:<msg>    <id>1</id>    <action>stop</action></msg>我是.Net的新手,并不确定执行此操作的最佳做法。我之前使用过JAXB for Java,并且不确定是否有类似的东西,或者是否会以不同的方式处理。
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您需要使用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.exeC#类进行转换:

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);


查看完整回答
反对 回复 2019-07-23
?
临摹微笑

TA贡献1982条经验 获得超2个赞

尝试使用此方法将Xml转换为对象。这是为了你正在做的事情:

protected T FromXml<T>(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<YourStrongTypedEntity>(YourMsgString);


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 1217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信