【原创】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

目录
相关文章
|
7月前
|
XML 存储 C#
C#三十 Ado.net和XML
C#三十 Ado.net和XML
34 0
|
7月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
96 0
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
173 2
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
5月前
|
XML 数据采集 JavaScript
基于.Net开源Html解析器,此外还支持SVG、XML等格式
基于.Net开源Html解析器,此外还支持SVG、XML等格式
23 0
|
6月前
|
存储 XML JSON
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化
38 0
|
6月前
|
XML JavaScript 前端开发
SAP UI5 Fiori Elements annotation 文件序列化成 DOM 对象的逻辑
SAP UI5 Fiori Elements annotation 文件序列化成 DOM 对象的逻辑
27 0
|
8月前
|
XML 人工智能 JSON
SpringBoot实战(二):SpringMvc接收xml请求
SpringBoot实战(二):SpringMvc接收xml请求
329 0
|
9月前
|
XML 存储 JSON
ASP.NET Core MVC 从入门到精通之序列化
ASP.NET Core MVC 从入门到精通之序列化
54 0
|
9月前
|
开发框架 前端开发 JavaScript
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(完)
VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(完)
78 0