Tag: xmlserializer

如何在使用XmlSerializer时将注释写入XML文件?

我有一个对象Foo,我将其序列化为XML流。 public class Foo { // The application version, NOT the file version! public string Version {get;set;} public string Name {get;set;} } Foo foo = new Foo { Version = “1.0”, Name = “Bar” }; XmlSerializer xmlSerializer = new XmlSerializer(foo.GetType()); 这可以快速,轻松地完成当前所需的一切。 我遇到的问题是我需要维护一个单独的文档文件,其中包含一些小的评论。 如上例所示, Name很明显,但Version是应用程序版本,而不是数据文件版本,正如人们在这种情况下所期望的那样。 而且我还有许多类似的小事我想用评论来澄清。 我知道如果我使用WriteComment()函数手动创建我的XML文件,我可以这样做,但是我可以实现一个可能的属性或替代语法,以便我可以继续使用序列化器function吗?

文件存在时FileMode.Open和FileMode.OpenOrCreate的区别? c#bug?

我写了那段代码: public void Save() { using (FileStream fs = new FileStream(Properties.Settings.Default.settings_file_path, FileMode.Open)) { XmlSerializer ser = new XmlSerializer(typeof(MySettings)); ser.Serialize(fs, this); } } 当我使用FileMode.Open一切都很好,输出是这样的: 12 A0 MEASUREMENT 5000 C0 MEASUREMENT 但当我将其更改为FileMode.OpenOrCreate输出将更改为: 12 A0 MEASUREMENT 5000 C0 MEASUREMENT > 是什么让整个xml文件因为最后添加>符号而损坏。 这是可解释的还是它的c#bug?

XmlSerializer序列化通用接口列表

我正在尝试使用XmlSerializer来持久化List(T),其中T是一个接口。 序列化器不喜欢接口。 我很好奇是否有一种简单的方法可以使用XmlSerializer轻松地序列化异构对象列表。 这就是我想要的: public interface IAnimal { int Age(); } public class Dog : IAnimal { public int Age() { return 1; } } public class Cat : IAnimal { public int Age() { return 1; } } private void button1_Click(object sender, RoutedEventArgs e) { var animals = new List { new Dog(), new […]

如何XML序列化字典

我已经能够以这种方式序列化IEnumerable: [XmlArray(“TRANSACTIONS”)] [XmlArrayItem(“TRANSACTION”, typeof(Record))] public IEnumerable Records { get { foreach(Record br in _budget) { yield return br; } } } 但是,我意识到现在我需要一个包含集合Dictionary (RecordCollection实现IEnumerable)的Dictionary 。 我怎样才能做到这一点?

ShouldSerialize *()vs *指定的条件序列化模式

我知道ShouldSerialize *模式和* Specified模式以及它们是如何工作的,但两者之间有什么区别吗? 当某些事物应该有条件地序列化时,是否有任何“陷阱”使用一种方法而不是另一种方法? 此问题特定于XmlSerializer的用法,但也欢迎有关此主题的一般信息。 关于这个主题的信息非常少,所以可能是因为它们执行完全相同的目的而且它是一种风格选择。 但是,.NET实现者通过reflection分析类并查找其中一个/两个模式来确定生成的序列化程序的行为,因为它减慢了序列化程序的生成,除非它只是一个向后兼容性工件,这似乎很奇怪。 编辑:对于那些不熟悉这两种模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性被序列化。 public string MyProperty { get; set; } //*Specified Pattern [XmlIgnore] public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } } //ShouldSerialize* Pattern public bool ShouldSerializeMyProperty() { return !string.IsNullOrWhiteSpace(this.MyProperty); }