反序列化此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
0A .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...
更多推荐
发布评论