如何新建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