【原创】ASP.NET WebApi接收xml文件 xml序列化

简介: 如何新建WebApi项目就不用我介绍了吧。直接进入正题。首先,在.net平台不论要接收什么,肯定是从Request里获取。大家肯定对普通的参数获取非常熟悉了,下面就介绍一下如何从Request获取文件流.System.IO.Stream sm =Request.Content.ReadAsStreamAsync().Result这个方法返回的是一个System.IO.Stream类型,如果是单纯想获得文件,到这一步你就可以把它保存到本地了。

如何新建WebApi项目就不用我介绍了吧。

直接进入正题。

首先,在.net平台不论要接收什么,肯定是从Request里获取。

大家肯定对普通的参数获取非常熟悉了,下面就介绍一下如何从Request获取文件流.

System.IO.Stream sm =Request.Content.ReadAsStreamAsync().Result

这个方法返回的是一个System.IO.Stream类型,如果是单纯想获得文件,到这一步你就可以把它保存到本地了。

这时候有些同学可能就要问了,要用什么方式读取里面的数据呢?

下面为大家介绍几种方式解析xml数据流:

转换为string类型:

 int len = (int)sm.Length;
 byte[] inputByts = new byte[len];
 sm.Read(inputByts, 0, len);
 sm.Close();
  string data = Encoding.GetEncoding("utf-8").GetString(inputByts);

2.转换为XmlDocument(需要先用第一个方法转为string):

XmlDocument xmlDocument=new XmlDocument();
xmlDocument.LoadXml(data );

3.转为对象:

方法一:

首先为xml所有含有子节点的节点创建对应的类和字段,节点里包含有子节点的节点的,用该节点对应的类作为字段类型。

下面附例子:

xml数据:

<?xml version="1.0" encoding="UTF-8" ?>
<ws:Worker_Sync
    xmlns:ws="http://www.w3.org/2001/XMLSchema-instance">
    <ws:Worker>
        <ws:Summary>
            <ws:ID>02741</ws:ID>
            <ws:Name>Tina</ws:Name>
        </ws:Summary>
        <ws:Age>true</ws:Age>
    </Worker>
    <ws:Worker>
        <ws:Summary>
            <ws:ID>02741</ws:ID>
            <ws:Name>Tina</ws:Name>
        </ws:Summary>
        <ws:Age>true</ws:Age>
    </Worker>
</Worker_Sync>

跟据xml我们可以知道需要创建三个Class,分别对应StudentSync、Student和Summary节点。

把类创建好之后,我们需要给它加上注解:

[System.Xml.Serialization.XmlRoot(ElementName ="Student_Sync", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public class Student_Sync
{
     [System.Xml.Serialization.XmlElement("Student")]
     public Student[] Students { get; set; }
}

这里可能大家有注意到Student用的是Student[],这是因为在XML中有多个Student节点。

Student中与之类似:

[System.Xml.Serialization.XmlRoot("Student")]
public class Student
{
   [System.Xml.Serialization.XmlElement("Summary")]
   public Summary Summary { get; set; }
   [System.Xml.Serialization.XmlElement("Age")]
   public  int  Age { get; set; }
}

Summary:

[System.Xml.Serialization.XmlRoot("Summary")]
    public class Summary
    {
        [System.Xml.Serialization.XmlElement("ID")]
        public string ID { get; set; }
 
        [System.Xml.Serialization.XmlElement("Name")]
        public string Name { get; set; }
         
    }

Class创建完毕后,就可以进行转换了,这里我们使用XmlSerializer:

var serializer = new XmlSerializer(typeof(Student_Sync));
var Student_SyncItem = (Student_Sync)serializer.Deserialize(sm);

转换完成!

方法二:

使用Linq进行转换(这种方式不大用,就直接贴代码了,跟上面没关系哦!):

/// /// Linq方式加载
/// /// /// private void Button_Click_3(object sender, RoutedEventArgs e)
{
     //ClassDemo作为根节点会出现找不到的情况,所以加了个Config根节点
     List _demo = (from item in XElement.Load("XmlDemo2.xml").Elements("ClassDemo")                        
                    select new ClassDemo()
                    {
                      Name = item.Element("Name").Value,
                      Members = (from mem in item.Element("Members").Elements() select mem.Value).ToList(),
                      Children = (from child in item.Element("Children").Elements()
                             select new ClassChild()
                             {
                                 ID = child.Element("ID").Value,
                                 Name = child.Element("Name").Value
                             }).ToList()
                    }
                  ).ToList();
  
            MessageBox.Show("加载成功!");
        }

如果本文能帮助到你,我会感到万分荣幸~

感谢每一位收藏本站的小可爱@_@

转载请声明出处:

本文首发地址:https://www.fhcollege.com/FHCollege/Single?FHS_Post_Id=880a0f91-104c-4bf9-b41e-adc47894ae2a

本站地址:https://www.fhcollege.com

目录
相关文章
|
12天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
9 0
|
14天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
9 0
|
1月前
|
Kubernetes Cloud Native Java
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
39 1
|
1月前
|
XML Java 数据库连接
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
11 0
|
4天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
11 1
|
29天前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1
|
1月前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
1月前
|
SQL Java 数据库连接
Mybatis中Mapper.xml 文件使用注释遇到的坑
Mybatis中Mapper.xml 文件使用注释遇到的坑