简体   繁体   English

C# 使用 XMLSerializer 从 url 读取 XML

[英]C# Reading XML from url while using XMLSerializer

I have been reading How To Parse XML In .NET Core There they show an example on parsing XML using XMLSerializer.我一直在阅读How To Parse XML In .NET Core他们展示了一个使用 XMLSerializer 解析 XML 的示例。

[XmlRoot("MyDocument", Namespace = "http://www.dotnetcoretutorials.com/namespace")]
public class MyDocument
{
    public string MyProperty { get; set; }

    public MyAttributeProperty MyAttributeProperty { get; set; }

    [XmlArray]
    [XmlArrayItem(ElementName = "MyListItem")]
    public List MyList { get; set; }
}

public class MyAttributeProperty
{
    [XmlAttribute("value")]
    public int Value { get; set; }
}

and to read it:并阅读它:

using (var fileStream = File.Open("test.xml", FileMode.Open))
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyDocument));
    var myDocument = (MyDocument)serializer.Deserialize(fileStream);

    Console.WriteLine($"My Property : {myDocument.MyProperty}");
    Console.WriteLine($"My Attribute : {myDocument.MyAttributeProperty.Value}");

    foreach(var item in myDocument.MyList)
    {
        Console.WriteLine(item);
    }
}

In the code above itreads the local xml file:在上面的代码中,它读取本地 xml 文件:

using (var fileStream = File.Open("test.xml", FileMode.Open)) . using (var fileStream = File.Open("test.xml", FileMode.Open))

I want to read an XML file from URL, and make use of XmlSerializer, how would I accomplish this?我想从 URL 读取一个 XML 文件,并使用 XmlSerializer,我将如何完成这个?

Since you already have your XML parsing logic in place, all you need is to swap out the file reading for an HTTP request.由于您已经有了 XML 解析逻辑,您只需将文件读取换成 HTTP 请求即可。

using (var client = new HttpClient())
{
    var content = await client.GetStreamAsync("http://...");

    XmlSerializer serializer = new XmlSerializer(typeof(MyDocument));
    var myDocument = (MyDocument)serializer.Deserialize(new MemoryStream(content));

    Console.WriteLine($"My Property : {myDocument.MyProperty}");
    Console.WriteLine($"My Attribute : {myDocument.MyAttributeProperty.Value}");

    foreach(var item in myDocument.MyList)
    {
        Console.WriteLine(item);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM