gpt4 book ai didi

c# - 当 XML 具有多个同名元素时,如何将 XML 表示为类

转载 作者:行者123 更新时间:2023-11-30 22:57:49 25 4
gpt4 key购买 nike

假设我们有以下 xml。

<Company>
<Tables>
<Agri>
<Tables>
<Table Id="1">
</Table>
</Tables>
<Tables>
<Table Id="2">
</Table>
</Tables>
</Agri>
<Tables>
<Table Id="3">
</Table>
</Tables>
<Tables>
<Table Id="4">
</Table>
</Tables>
</Tables>
</Company>

如何将此类 xml 表示为类?

我试过类似的方法,但似乎不起作用。

void Test()
{
string xml = //...
using (var reader = new StringReader(xml))
{
var company = (Company)new XmlSerializer(typeof(Company)).Deserialize(reader);
}
}

public class Company
{
public CompanyTables Tables { get; set; }
}
public class CompanyTables
{
[XmlArray]
public Table[] Tables { get; set; }
}
public class Table
{
[XmlAttribute("Id")]
public string Id { get; set; }
}

这是到目前为止我能得到的。

enter image description here

我想它会用两个 Table 实例(Id 3 和 4)填充 CompanyTable.Tables

我暂时忽略 Agri 元素,只在此处显示以更好地反射(reflect) xml 的实际结构。

我会继续努力,但我们将不胜感激任何形式的帮助。谢谢!

最佳答案

Table 类封装在 Tables 类中。所以你的 Tables 类应该有自己的“内部”集合(Tables)

public class Company
{
public List<Tables> Tables { get; set; }
}

// As you said Agri type ignored for now
public class Tables
{
public Table Table { get; set; } // Use collection if Table can be more the one

[XmlElement("Tables")]
public Tables InnerTables { get; set; }
}

public class Table
{
[XmlAttribute]
public string Id { get; set; }
}

测试

private T DeserialzeFrom<T>(string xml)
{
using (var reader = new StringReader(xml))
{
return (T)new XmlSerializer(typeof(T)).Deserialize(reader);
}
}

[Test]
public void ShouldDeserializeCompany()
{
var xml = // Build xml string;

// Expected deserialized object
var expected = new Company
{
Tables = new List<Tables>
{
new Tables { Table = new Table { Id = "3" }},
new Tables { Table = new Table { Id = "4" }}
}
};

var actual = DeserialzeFrom<Company>(xml);

actual.ShouldBeEquivalentTo(expected); // Test passing
}

关于c# - 当 XML 具有多个同名元素时,如何将 XML 表示为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com