反序列化此XML字符串的正确方法是什么?(What is the correct way to deserialize this XML string?)

编程入门 行业动态 更新时间:2024-10-10 12:23:13
反序列化此XML字符串的正确方法是什么?(What is the correct way to deserialize this XML string?)

我将显示在我主页上的项目存储为XML字符串(在设置中)。

<?xml version=""1.0""?> <HomePageItemList> <PlantHomePageItem> <Name>Plant1</Name> </PlantHomePageItem> <PlantHomePageItem> <Name>Plant2</Name> </PlantHomePageItem> <AdminHomePageItem> <Name>Admin1</Name> </AdminHomePageItem> </HomePageItemList>

一些项目代表植物PlantHomePageItem ,其他项目代表管理工具AdminHomePageItem 。 两者都继承了相同的基类HomePageItem

[XmlRoot("HomePageItemList")] public class TestSerialization { [XmlArray("HomePageItemList")] [XmlArrayItem("PlantHomePageItem", Type = typeof(PlantHomePageItem))] [XmlArrayItem("AdminHomePageItem", Type = typeof(AdminHomePageItem))] public List<HomePageItem> HomePageItemList { get; set; } } [XmlInclude(typeof(PlantHomePageItem))] [XmlInclude(typeof(AdminHomePageItem))] public class HomePageItem { [XmlElement("Name")] public string Name { get; set; } } public class PlantHomePageItem : HomePageItem { } public class AdminHomePageItem : HomePageItem { }

当我尝试反序列化它时,我没有运行时错误,只是一个空对象......

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML)); XmlSerializer xs = new XmlSerializer(typeof(TestSerialization)); TestSerialization obj = (TestSerialization)xs.Deserialize(ms); Console.WriteLine(obj.HomePageItemList.Count); foreach (var item in obj.HomePageItemList) { Console.WriteLine("{0}: {1}", item.GetType().Name, item.Name); }

回报

0

提供整个事物的.NET小提琴: https : //dotnetfiddle.net/f51b0K

I store the items displayed on my homepage as an XML string (in the settings).

<?xml version=""1.0""?> <HomePageItemList> <PlantHomePageItem> <Name>Plant1</Name> </PlantHomePageItem> <PlantHomePageItem> <Name>Plant2</Name> </PlantHomePageItem> <AdminHomePageItem> <Name>Admin1</Name> </AdminHomePageItem> </HomePageItemList>

Some items represent a plant PlantHomePageItem, others an admin tool AdminHomePageItem. Both inherit the same base class HomePageItem

[XmlRoot("HomePageItemList")] public class TestSerialization { [XmlArray("HomePageItemList")] [XmlArrayItem("PlantHomePageItem", Type = typeof(PlantHomePageItem))] [XmlArrayItem("AdminHomePageItem", Type = typeof(AdminHomePageItem))] public List<HomePageItem> HomePageItemList { get; set; } } [XmlInclude(typeof(PlantHomePageItem))] [XmlInclude(typeof(AdminHomePageItem))] public class HomePageItem { [XmlElement("Name")] public string Name { get; set; } } public class PlantHomePageItem : HomePageItem { } public class AdminHomePageItem : HomePageItem { }

When I try an deserialize it, I have no runtime error, just an empty object...

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML)); XmlSerializer xs = new XmlSerializer(typeof(TestSerialization)); TestSerialization obj = (TestSerialization)xs.Deserialize(ms); Console.WriteLine(obj.HomePageItemList.Count); foreach (var item in obj.HomePageItemList) { Console.WriteLine("{0}: {1}", item.GetType().Name, item.Name); }

returns

0

A .NET Fiddle with the entire thing is available: https://dotnetfiddle.net/f51b0K

最满意答案

将TestSerialization类更改为此...

[XmlRoot("HomePageItemList")] public class TestSerialization { [XmlElement("PlantHomePageItem", Type = typeof(PlantHomePageItem))] [XmlElement("AdminHomePageItem", Type = typeof(AdminHomePageItem))] public List<HomePageItem> HomePageItemList { get; set; } }

你修改过的例子......

Change your TestSerialization class to this...

[XmlRoot("HomePageItemList")] public class TestSerialization { [XmlElement("PlantHomePageItem", Type = typeof(PlantHomePageItem))] [XmlElement("AdminHomePageItem", Type = typeof(AdminHomePageItem))] public List<HomePageItem> HomePageItemList { get; set; } }

Your modified example...

更多推荐

本文发布于:2023-07-19 15:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1182537.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   正确   序列化   方法   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!