【问题标题】:Convert XML data to C# class将 XML 数据转换为 C# 类
【发布时间】:2019-01-25 16:15:17
【问题描述】:

我的项目是 Asp.net Core
我想将 XML 数据转换为 C# 类,XML 数据有一个节点 PersonelInfo 我尝试读取 XML,但它的代码不起作用。 我该如何解决这个代码?我的问题是什么?

var xmlGetDetailsUser = new XmlDocument();
xmlGetDetailsUser.LoadXml(await responseMessageGetDetailsUser.Content.ReadAsStringAsync());
using (StringReader reader = new StringReader(xmlGetDetailsUser.InnerXml))
{
    try
    {
        PersonelInfo data = (PersonelInfo)(serializer.Deserialize(reader));
    }
    catch (System.Exception e)
    { }
}

public class PersonelInfo
{
  public string PersonelCode { get; set; }
  public string Email { get; set; }
}

xmlGetDetailsUser.InnerXml 有这个值:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<ArrayOfPersonelInfo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"sample url .....\">
    <PersonelInfo>
        <PersonelCode>99999</PersonelCode>    
        <Email>test@test.com</Email>        
    </PersonelInfo>
</ArrayOfPersonelInfo>

当运行我的程序时,在 try catch 中显示此异常

XML 中有错误

【问题讨论】:

  • 转义的" 字符是否是原因?
  • inner XML 实际上包含&lt;? xml ... ?&gt; 声明会很奇怪。你能发布完整的 XML 吗?
  • @DaisyShipton 是完整的 XML
  • @SebastianHofmann 转义的“字符是什么意思?

标签: c# xml asp.net-core


【解决方案1】:

您应该为XmlSerializer 设置命名空间并将其类型更改为List&lt;PersonelInfo&gt;

试试这个:

XmlSerializer serializer = new XmlSerializer(typeof(List<PersonelInfo>), "sample url ....");
            XmlReaderSettings settings = new XmlReaderSettings();
            using (StringReader textReader = new StringReader(await responseMessageGetDetailsUser.Content.ReadAsStringAsync()))
            {
                using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
                {
                    var data = (List<PersonelInfo>)serializer.Deserialize(xmlReader);
                }
            }

【讨论】:

    【解决方案2】:

    我找到了答案,但是 这似乎不是将 XML 转换为 C# 的好方法 你觉得如何改进这段代码?

    var xmlGetDetailsUser = new XmlDocument();
    xmlGetDetailsUser.LoadXml(await responseMessageGetDetailsUser.Content.ReadAsStringAsync());
    var result = xmlGetDetailsUser.GetElementsByTagName("PersonelInfo");
    XmlSerializer serializer = new XmlSerializer(typeof(PersonelInfo));
    var personelInfo = new PersonelInfo();
    personelInfo.PersonelCode = result.Item(0)["PersonelCode"].InnerText;
    personelInfo.Email = result.Item(0)["Email"].InnerText;
    

    【讨论】:

    • 你能告诉我们web service的方法定义吗?它会返回一个数组还是一个对象?对于 xml,它似乎是数组而不是对象。试试responseMessageGetDetailsUser.Content.ReadAsAsync&lt;PersonelInfo&gt;()responseMessageGetDetailsUser.Content.ReadAsAsync&lt;IList&lt;PersonelInfo&gt;&gt;()
    • @TaoZhou My Webservice 返回类数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2011-09-07
    • 2012-01-13
    • 2022-01-20
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多