gpt4 book ai didi

c# - 反序列化具有属性和值的元素

转载 作者:行者123 更新时间:2023-11-30 20:30:11 24 4
gpt4 key购买 nike

给定一个同时计算属性和元素值的 XML 结构,如何使用 System.Xml.Serialization 属性构造我的 C# 类?

我的 XML 如下所示:

<Accounts>
<Number credit="1000">100987654321</Number>
<Number credit="0" >100987654322</Number>
<Accounts>

我一直在尝试使用这个类结构,但它不接受 XML。

public class Customer
{
[DataMember, XmlArrayItem(ElementName = "Accounts")]
public AccountNumber[] AccountNumbers;
}

public class AccountNumber
{
[DataMember, XmlElement(ElementName = "Number")]
public string AccountNumber;

[DataMember, XmlAttribute(AttributeName = "credit")]
public int Credit;
}

诀窍是不要在“Number”元素中嵌套数字数组。我们经常在例如中看到这种结构。 html 标签,其中您可能有一个具有某种样式的标签,以及之间的实际值

"... height=12px> value </..."

最佳答案

AccountNumber 类可以定义如下:

public class AccountNumber
{
[XmlText]
public string Number { get; set; }

[XmlAttribute(AttributeName = "credit")]
public int Credit { get; set; }
}

这会导致属性和元素文本被正确反序列化。

PS。我必须将 AccountNumber 更改为 Number,因为否则它将无法编译,并且将 Credit 属性从 DateTime 更改为 int 因为该属性的值显然不是日期/时间。

您可能还必须修复您的 Customer 类,我使用以下内容进行测试:

[XmlRoot("Accounts")]
public class Accounts
{
[XmlElement(ElementName = "Number")]
public AccountNumber[] AccountNumbers;
}

以及测试“程序”本身:

static void Main(string[] args)
{
string str = @"<Accounts><Number credit=""1000"">100987654321</Number><Number credit=""0"">100987654322</Number></Accounts>";

using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(str)))
{
XmlSerializer ser = new XmlSerializer(typeof(Accounts));
var result = (Accounts)ser.Deserialize(stream);
}
}

关于c# - 反序列化具有属性和值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169285/

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