gpt4 book ai didi

c# - 如何使用列表(不是数组)反序列化此 xml

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:49 24 4
gpt4 key购买 nike

我正在尝试使用 C# 在 SILVERLIGHT 中进行反序列化。在我使用 XmlArray 之前它可以工作,但我想改用 List 因为我已经使用 List 完成了前一部分(所以当我只使用数组时看起来很奇怪)。

我的 xml 是这样的:

<ps>
<disable_others>
<disable_other>
<disable_value>1</disable_value>
<to_disable>skew</to_disable>
<to_disable>skew_side</to_disable>
</disable_other>
<disable_other>
<disable_value>0</disable_value>
<to_disable>automodel</to_disable>
</disable_other>
</disable_others>
<ps>

我的反序列化尝试是:

[XmlRoot(ElementName = "ps")]
public class ps
{
[XmlArray("disable_others")]
[XmlArrayItem("disable_other", IsNullable = false)]
public List<string> Disable_Others { get; set; }

/* I know it can be done using the below but i have to use List not array:
[XmlArray("disable_others")]
[XmlArrayItem("disable_other", IsNullable = false)]
public Disable_Other[] Disable_Others { get; set; } */



}


[XmlRoot(ElementName = "disable_Others")]
public class Disable_Others
{
[XmlElement("disable_other")]
public List<Disable_Other> Disable_Other { get; set; }

}

[XmlRoot(ElementName = "Disable_Other")]
public class Disable_Other
{
[XmlElement("disablingitem")]
public int DisablingItem { get; set; }

[XmlElement("to_disable")]
public string[] To_Disable { get; set; }

[XmlElement("disable_value")]
public byte Disable_Value { get; set; }

}

有人可以帮助我使用 List 而不是 array(XmlArray) 来实现目标吗?

最佳答案

您的 XML 格式应如下所示:

<?xml version="1.0"?>
<ps xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<disable_others>
<Disable_Other>
<disablingitem>0</disablingitem>
<to_disable>
<string>skew</string>
<string>skew_side</string>
</to_disable>
<disable_value>1</disable_value>
</Disable_Other>
<Disable_Other>
<disablingitem>0</disablingitem>
<to_disable>
<string>automodel</string>
</to_disable>
<disable_value>0</disable_value>
</Disable_Other>
</disable_others>
</ps>

在此之后,您的类(class)应该如下所示:

    [Serializable]
[XmlRoot(ElementName = "ps")]
public class ps
{
[XmlArray("disable_others")]
[XmlArrayItem(typeof(Disable_Other), IsNullable = false)]
public List<Disable_Other> Disable_Others { get; set; }

public ps()
{
Disable_Others = new List<Disable_Other>();
}

}

[Serializable]
[XmlRoot("disable_other")]
public class Disable_Other
{
[XmlElement("disablingitem")]
public int DisablingItem { get; set; }

//[XmlElement("to_disable")]
[XmlArray("to_disable")]
public string[] To_Disable { get; set; }

[XmlElement("disable_value")]
public byte Disable_Value { get; set; }

}

在你的代码中这样反序列化:

ps p;
XmlSerializer serializer = new XmlSerializer(typeof(ps));
using (StreamReader reader = new StreamReader("test1.xml"))
{
//basic exception handling...
try
{
p = (ps)serializer.Deserialize(reader);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

关于c# - 如何使用列表(不是数组)反序列化此 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24267707/

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