【问题标题】:C# Reading XML from url while using XMLSerializerC# 在使用 XMLSerializer 时从 url 读取 XML
【发布时间】:2021-05-03 20:13:41
【问题描述】:

我一直在阅读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; }
}

并阅读它:

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);
    }
}

在上面的代码中它读取本地的xml文件:

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

我想从 URL 中读取一个 XML 文件,并使用 XmlSerializer,我该如何完成呢?

【问题讨论】:

标签: c# xml .net-core


【解决方案1】:

由于您已经准备好 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);
    }
}

【讨论】:

  • var myDocument = (MyDocument)serializer.Deserialize(content); 说:Cannot resolve method 'Deserialize(string)', candidates are: object Deserialize(System.IO.Stream) (in class XmlSerializer) object Deserialize(System.IO.TextReader) (in class XmlSerializer) object Deserialize(System.Xml.XmlReader) (in class XmlSerializer
  • client.GetStreamAsync(url) 有效。更新答案,我会接受的。
  • 我明白了。我还没有测试它,但您需要做的就是将您的内容(字符串)转换为 Stream。我会更新答案。
  • 只是吹毛求疵。 new MemoryStream(content) 后面有一个 )。我不能只编辑一个字符。
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 2012-08-28
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多