将XML数据转换为C#类

8 浏览
0 Comments

将XML数据转换为C#类

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

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

\n类\n

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

\nxmlGetDetailsUser.InnerXml的值为:\n



    
        99999    
        test@test.com        
    

\n当运行我的程序时,在try catch中显示以下异常:\n

XML中存在错误

0
0 Comments

问题的出现原因是代码中使用的方法不够好,无法将XML转换为C#类。现在作者希望改进这段代码,并询问读者对于改进的看法。还有Web服务的方法定义,询问其返回的是一个数组还是一个对象,并建议尝试使用其他方法来进行转换。

要解决这个问题,我们可以考虑使用更好的方法来将XML数据转换为C#类。一种可能的解决方法是使用.NET的内置功能,如XmlSerializer类来完成转换。

以下是改进后的代码示例:

var xmlGetDetailsUser = new XmlDocument();
xmlGetDetailsUser.LoadXml(await responseMessageGetDetailsUser.Content.ReadAsStringAsync());
var result = xmlGetDetailsUser.GetElementsByTagName("PersonelInfo");
XmlSerializer serializer = new XmlSerializer(typeof(PersonelInfo));
var personelInfo = (PersonelInfo)serializer.Deserialize(new XmlNodeReader(result.Item(0)));

这段代码使用XmlSerializer类来进行XML到C#类的转换。首先,我们需要加载XML数据并获取到PersonelInfo节点。然后,我们创建一个XmlSerializer对象,指定要进行转换的类型。最后,我们使用Deserialize方法将PersonelInfo节点转换为C#类的对象。

另外,还有Web服务的方法定义问题。根据作者提供的信息,该Web服务返回的是一个类的数组。因此,我们可以尝试使用responseMessageGetDetailsUser.Content.ReadAsAsync<PersonelInfo[]>()方法来进行转换。

通过使用XmlSerializer类和适当的方法来进行转换,我们可以更好地将XML数据转换为C#类,并解决这个问题。同时,根据Web服务的方法定义,我们可以选择合适的方法来处理返回的数据。

0
0 Comments

问题:将XML数据转换为C#类的问题是什么?

原因:没有为XmlSerializer设置命名空间,并且将其类型更改为List

解决方法:

XmlSerializer serializer = new XmlSerializer(typeof(List), "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)serializer.Deserialize(xmlReader);
    }
}

以上代码将为XmlSerializer设置命名空间,并将其类型更改为List,以便正确地将XML数据转换为C#类。

0