XMLSerialize一个ObservableCollection
我在observable集合的xml序列化中遇到问题。
这是我序列化的内容:
public enum Status { Pending, Active, Completed, Cancelled } public abstract class Entity : INotifyPropertyChanged { ... } public class UserStory : Entity { public uint StoryID { get; set; } public Status Status { get; set; } ... public ObservableCollection Tasks { get; set; } } public class Task : Entity { public uint TaskID { get; set; } ... }
这是我如何序列化它:
public static void SerializeObjectToXML(T item, string FilePath) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StreamWriter wr = new StreamWriter(FilePath)) { xs.Serialize(wr, item); } } public class Main() { ObservableCollection UserStories { get; set; } void Main() { ... ObservableCollection Document = new ObservableCollection(); Document.Add(UserStories); SerializeObjectToXML<ObservableCollection>(Document , "..."); ... } }
但是xs.Serialize(wr, item);
发生错误xs.Serialize(wr, item);
一行说:
InvalidOperationexception :生成XML文档时出错。 内部exception :ScrumPresentor.ObservableCollection`1 [[ScrumPresentor.UserStory,ScrumPresentor,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]类型可能不会在此上下文中使用。
我在.NET 4.0中使用Visual Studio 2010,WPF应用程序。
尝试使用System.Xml.Serialization.XmlInclude属性。 我不确定我是否正确理解了你收集的集合的意图,但假设这是你想要的,这是一个有效的解决方案。 输出遵循以下代码:
using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Xml.Serialization; namespace StackoverflowXxmlSerialize { public enum Status { Pending, Active, Completed, Cancelled } [System.Xml.Serialization.XmlInclude(typeof(UserStory))] [System.Xml.Serialization.XmlInclude(typeof(Task))] public abstract class Entity : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; } public class UserStory : Entity { public uint StoryID { get; set; } public Status Status { get; set; } public ObservableCollection Tasks { get; set; } } public class Task : Entity { public uint TaskID { get; set; } } class Util { public static void SerializeObjectToXML(T item, string FilePath) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StreamWriter wr = new StreamWriter(FilePath)) { xs.Serialize(wr, item); } } } public class TestSerialize { static ObservableCollection UserStories { get; set; } public static void RunTest() { UserStories = new ObservableCollection { new UserStory { StoryID = 127, Status = Status.Active, Tasks = new ObservableCollection{new Task { TaskID = 11 }, new Task { TaskID = 12 }} }, new UserStory { StoryID = 128, Status = Status.Cancelled, Tasks = new ObservableCollection {new Task { TaskID = 13 }, new Task { TaskID = 14 }} }, new UserStory { StoryID = 129, Status = Status.Completed, Tasks = new ObservableCollection {new Task { TaskID = 9 }, new Task { TaskID = 10 }} }, }; ObservableCollection> Document = new ObservableCollection>(); Document.Add(UserStories); Util.SerializeObjectToXML>>(Document, @"d:tmpjunk.txt"); } } }
上面的代码生成了这个文本文件:
上述就是C#学习教程:XMLSerialize一个ObservableCollection分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
127 Active 11 12 128 Cancelled 13 14 129 Completed 9 10
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/992339.html