Tag: xmlserializer

C# – 派生类的XML序列化

我正在尝试序列化多个元素的列表(供应商,客户,产品等),所有元素都来自同一个类(MasterElement) public class XMLFile { [XmlArray(“MasterFiles”)] public List MasterFiles; … } [XmlInclude(typeof(Supplier))] [XmlInclude(typeof(Customer))] public abstract class MasterElement { public MasterElement() { } } [XmlType(TypeName = “Supplier”)] public class Supplier: MasterElement { public string SupplierID; public string AccountID; } [XmlType(TypeName = “Customer”)] public class Customer: MasterElement { public string CustomerID; public string AccountID; public string CustomerTaxID; […]

XmlSerializer在实现IList 时如何/以不同方式处理类?

XmlSerializer在我的类上调用IList.Add() ,我不明白为什么。 我有一个自定义类(层次结构中的几个类之一),包含我使用XmlSerializer转换为XML的数据。 在我的代码的先前版本中,这些类没有实现任何接口,并且XML序列化和反序列化似乎都按预期工作。 我现在正在研究使用此类中包含的数据的其他代码,我认为如果我可以通过IList接口访问数据会很有用,所以我修改了我的类以实现该接口。 (在这种情况下,“T”是我的另一个自定义类。)这不涉及向类中添加任何新字段; 我根据已经存储的数据实现了所有必需的方法和属性 。 我希望这不会以任何方式影响序列化。 但是,当将XML数据反序列化到我的类时,现在正在调用我作为IList接口的一部分实现的新的Add()方法(这是一个问题,因为这个特定的列表是IsReadOnly ,因此Add()抛出NotSupportedException ) 。 即使我的类的XML节点只是而没有任何XML属性或子节点,也会发生这种情况; XmlSerializer显然仍在创建一个新的myOtherClass (它没有在XML文档中的任何地方命名)并尝试Add()它到myClass 。 我在搜索信息方面遇到了麻烦,因为涉及XmlSerializer和IList大多数问题似乎都涉及到人们试图序列化/反序列化IList类型的变量。 那不是我的情况; 我在代码中的任何地方都没有IList类型的变量。 如果我不实现IList接口,我的类序列化和反序列化就好了。 任何人都可以向我解释为什么XmlSerializer在我的类上调用IList.Add() ,和/或如何让它停止? 理想情况下,建议应该与最终在Unity3d(.NET 2.0)中运行的代码兼容。

XmlSerializer:保留未知元素

我有一个从XML序列化/反序列化并存储在文件中/从文件中恢复的类: public class Customer { public string FirstName; public string LastName; public Customer() { } public Customer(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } public static Customer Load(TextReader reader) { XmlSerializer deserializer = new XmlSerializer(typeof(Customer)); return (Customer)deserializer.Deserialize(reader); } public void Save(TextWriter writer) { XmlSerializer serializer = new XmlSerializer(GetType()); serializer.Serialize(writer, this); } […]

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 { […]

MVC4 webapi中的反序列化/模型绑定不适用于数组

我正在使用新的WebApi,它是MVC4 beta的一部分。 我有以下课程: public class Voucher { public string Id { get; set; } public string TableId { get; set; } public Product[] Products { get; set; } } 我的控制器看起来像这样: public class VouchersController : ApiController { public Voucher PostVoucher(Voucher voucher) { //…. } } 在客户端,我使用XmlSerializer序列化数据。 输出看起来像预期的那样, Products数组是序列化的。 如果我发布数据并在PostVoucher方法中放置一个断点,我会获得Id和TableId的数据,但Products为null 。 什么暗示我可能做错了什么?

XmlSerializer +多态性

给定一个(人为的)基类,以及我们想要使用XmlSerializer通过WCF序列化的子类。 我们根据文章装饰一个集合(参见响应类): http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.aspx (请参阅备注部分)。 问题是虽然似乎生成了正确的WSDL,但SVCUtil生成一个类文件,其中GetUserResponse类包含名为Items的属性。 这与将[XmlElement]应用于数组有关吗? 虽然XmlArray元素没有Type属性。 提前致谢。 [Serializable] [XmlType] public class UserBase { public int Id {get;set;} } [Serializable] [XmlType] public class BasicUser : UserBase { public string UserName {get;set;} } [Serializable] [XmlType] public class SuperUser : UserBase { public string UserName {get;set;} public bool SpecialLevel {get;set;} } [Serializable] [XmlType] public class GetUserResponse { […]

更改XmlSerializer序列化空元素的方式

我正在使用XmlSerializer。 它将对象序列化很好,但客户端要求所需的空元素采用此格式 。 序列化器将空元素序列化为是否有办法将其更改为序列化客户端所需的方式。

将对象序列化为具有属性和子元素的元素

我希望使用System.Xml.Serialization.XmlSerializer定义将生成以下xml的类。 我正在努力获取项目列表,其中的属性不包含’item’元素的子’container’元素。

XML(de)序列化无效字符串在c#中不一致?

在C#(。net 4.0和4.5 / vs2010和vs12)中,当我使用XMLSerializer序列化包含具有非法字符的字符串的对象时,不会引发错误。 但是,当我反序列化该结果时,会抛出“无效字符”错误。 // add to XML Items items = new Items(); items.Item = “\v hello world”; // contains “illegal” character \v // variables System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Items)); string tmpFile = Path.GetTempFileName(); // serialize using (FileStream tmpFileStream = new FileStream(tmpFile, FileMode.Open, FileAccess.ReadWrite)) { serializer.Serialize(tmpFileStream, items); } Console.WriteLine(“Success! XML serialized in file ” […]

XmlInclude:列表和数组

我有一个对象,它有变量作为object ,我想用XML序列化它。 为此,我添加了一些XmlInclude属性,以便管理可以使用的所有类型。 [Serializable] [XmlInclude(typeof(short[]))] [XmlInclude(typeof(ushort[]))] [XmlInclude(typeof(int[]))] [XmlInclude(typeof(uint[]))] [XmlInclude(typeof(ulong[]))] [XmlInclude(typeof(long[]))] [XmlInclude(typeof(byte[]))] [XmlInclude(typeof(decimal[]))] [XmlInclude(typeof(float[]))] [XmlInclude(typeof(double[]))] [XmlInclude(typeof(string[]))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(List))] [XmlInclude(typeof(MyObject))] [XmlInclude(typeof(TimeSpan))] [XmlInclude(typeof(OtherObject))] [XmlInclude(typeof(MySubObject1))] [XmlInclude(typeof(MySubObject2))] [XmlRoot(ElementName = “mc”)] public class MyClass: IComparable { [XmlElement(“fm”)] public object FirstMember; [XmlElement(“sm”)] public object SecondMember; [XmlElement(“tm”)] public object ThirdMember; } 我的问题是数组和列表声明不共存。 奇怪的是,如果首先放置数组属性,则数组成员被正确序列化,但不是列表成员。 反之亦然。 […]