Tag: xml serialization

如何通过XML序列化来了解何时加载?

我正在尝试通过XML序列化加载一个对象树,此时它将加载对象,并非常愉快地创建树。 我的问题围绕着这些类支持一定级别的审计这一事实。 我希望能够做的是在每个对象加载完成后调用一些方法。 为了论证,假设我有一个相当通用的对象树,在不同的级别有不同的类,如: 123 Any Street 456 High Street 有没有办法使用默认的序列化器(以类似的方式创建像ShouldSerializeFoo这样的方法)来确定每个对象的加载何时完成? 编辑:我应该指出,暴露类似于反序列化后我可以调用的OnLoaded()方法的明显案例,让我觉得这是一件“坏事”。 Edit2:为了讨论起见,这是我当前的hack “方法”,它适用于基本级别,但子City节点仍然认为需要保存更改(在现实世界中,对象模型要复杂得多) ,但这至少会编译,而不需要完整的源代码) public class Office { [XmlAttribute(“IsHq”)] public bool IsHeadquarters { get; set; } [XmlElement] public string Street { get; set; } [XmlElement] public Town Town { get; set; } protected virtual void OnLoaded() {} public static OfficeCollection Search() { OfficeCollection retval […]

如何在C#中解码字符串到XML字符串

我有一个字符串(来自CDATA元素),其中包含XML的描述。 我需要将此字符串解码为一个新字符串,使用C#正确显示字符 现有字符串: <?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?><myreport xmlns=”http://test.com/rules/client”><admin><ordernumber>123</ordernumber><state>NY</state></report></myreport> 字符串通缉: 123NY

如何将XML映射到C#对象

我有一个XML,我想加载到对象,操纵这些对象(设置值,读取值),然后保存这些XML。 对我来说,在我创建的结构(xsd)中包含XML非常重要。 一种方法是编写我自己的序列化程序,但它是否内置支持它或C#中的开源我可以使用?

将C#/ .NET中的位图序列化为XML

我想XML-Serialize一个复杂类型(类),它具有System.Drawing.Bitmap类型的属性 。 /// /// Gets or sets the large icon, a 32×32 pixel image representing this face. /// /// The large icon. public Bitmap LargeIcon { get; set; } 我现在已经发现使用默认的XML序列化程序序列化Bitmap不起作用,因为它没有公共无参数构造函数,这对于默认的xml序列化程序是必需的。 我知道以下内容: 有一个解决方法,发布在这里: http : //www.dotnetspider.com/resources/4759-XML-Serialization-C-Part-II-Images.aspx 。 但是,由于这包括添加另一个属性,这在我看来有点像黑客。 sourceforge上还有一个深度XML序列化项目。 我宁愿不想引用另一个项目,也不想广泛调整我的类,只允许这些位图的xml序列化。 有没有办法保持这么简单? 非常感谢,马塞尔

当从List inheritance类时,XmlSerializer不会序列化其他属性

我在这里有一个情况,我需要从Listinheritance我的类,但是当我这样做时,XmlSerializer不会序列化我的类中声明的任何属性或字段,以下示例演示: public partial class Form1 : Form { public Form1() { InitializeComponent(); DoSerialize(); } private void DoSerialize() { MyClass obj = new MyClass(); obj.Add(1); obj.Add(2); obj.Add(3); XmlSerializer s = new XmlSerializer(typeof(MyClass)); StringWriter sw = new StringWriter(); s.Serialize(sw, obj); } } [Serializable] [XmlRoot] public class MyClass : List { public MyClass() { } int myAttribute = […]

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); }