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

目录
相关文章
|
2月前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
128 0
|
7天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
29天前
.NET 压缩/解压文件
【9月更文挑战第5天】在 .NET 中,可利用 `System.IO.Compression` 命名空间进行文件的压缩与解压。首先引入相关命名空间,然后通过 GZipStream 类实现具体的压缩或解压功能。下面提供了压缩与解压文件的方法示例及调用方式,便于用户快速上手操作。
|
2月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
|
2月前
|
XML 开发框架 .NET
ASP.NET Web Api 如何使用 Swagger 管理 API
ASP.NET Web Api 如何使用 Swagger 管理 API
|
2月前
|
存储 开发框架 安全
ASP.NET WebApi 如何使用 OAuth2.0 认证
ASP.NET WebApi 如何使用 OAuth2.0 认证
|
2月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
2月前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
36 0
|
2月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间