C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# 解析XML和反序列化

C# 解析XML和反序列化的示例

作者:慌鼠

这篇文章主要介绍了C# 解析XML和反序列化的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

本次为了记录开发一个基于webservice接口,去解析对方传送过来的xml字符串。实际使用时遇到的一些问题。

传输过来的xml格式大致如下:

<?xml version="1.0" encoding="UTF-8"?>
<messages xmlns="http://www.test.com/hit/rhin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/hit/rhin file:///e:/request_message.xsd">
    <heartbeat/>
    <switchset></switchset>
    <business>
        <datasets>
            <setdetails>
                <WS02_01>内容</WS02_01>
            </setdetails>
            <setdetails>
                <WS02_01>内容</WS02_01>
            </setdetails>
        </datasets>
    </business>
</messages>

XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构 是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器。

具体实现代码:

    //读取xml
    XmlDocument xml = new XmlDocument();
    xml.LoadXml(XMLData);
    //命名空间处理
    XmlNamespaceManager m = new XmlNamespaceManager(xml.NameTable);   
    m.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    m.AddNamespace("d", "http://www.test.com/hit/rhin"); //d是随意的一个命名
    
    //读取数据节点,需要带上命名空间m
    XmlNodeList dataNodeList = xml.SelectNodes("d:messages/d:business/d:datasets/d:setdetails", m);
    if (dataNodeList != null && dataNodeList.Count > 0)
    {
        for (int i = 0; i < dataNodeList.Count; i++)
        {
            var model =  XmlToEntity<TestModel>(dataNodeList[i].OuterXml,"http://www.test.com/hit/rhin");
        }
           
    }

XmlToEntity方法 将xml反序列化到Model实体上。

    privated T XmlToEntity<T>(string xml, string nameSpace)
    {
        T obj = default(T);
        try
        {
            XmlRootAttribute root = new XmlRootAttribute("setdetails");
            root.Namespace = nameSpace;//带命名空间的操作
            XmlSerializer serializer = new XmlSerializer(typeof(T),root);

            StringReader sr = new StringReader(xml);
            obj = (T)serializer.Deserialize(sr);
            sr.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return obj;
    }

实体定义也需要说明命名空间

    [XmlRoot(Namespace = "http://www.test.com/hit/rhin", IsNullable = false, ElementName = "setdetails")]
    [Table("TAB_TEST")]
    public class TestModel
    {
        [XmlElement("WS02_01")]
        public string  NEIRONG { get; set; }
    }

以上就是C# 解析XML和反序列化的示例的详细内容,更多关于C# 解析XML和反序列化的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文