Tag: xml serialization

.NET序列化排序

我试图使用XmlSerializer和inheritance序列化一些对象,但我在排序结果时遇到一些问题。 下面是一个类似于我设置的例子:〜 public class SerializableBase { [XmlElement(Order = 1)] public bool Property1 { get; set;} [XmlElement(Order = 3)] public bool Property3 { get; set;} } [XmlRoot(“Object”)] public class SerializableObject1 : SerializableBase { } [XmlRoot(“Object”)] public class SerializableObject2 : SerializableBase { [XmlElement(Order = 2)] public bool Property2 { get; set;} } 我想要的结果如下:〜 但是我得到的结果是:〜 有谁知道它是否可能或任何替代方案? 谢谢

C#Xml序列化和反序列化

我试图序列化一个对象并将其保存到Sql server 2008 xml字段中。 我还有一些反序列化代码,可以重新保存对象。 我能够将对象序列化并保存到数据库中,但是会出现“Root element missing”exception。 [XmlRoot(“Patient”)] public class PatientXml { private AddressXml _address = null; private EmergencyContactXml _emergencyContact = null; private PersonalXml _personal = null; [XmlElement] public PersonalXml Personal { get { return _personal; } set { _personal = value; } } [XmlElement] public AddressXml Address { get { return _address; } […]

XmlSerialize具有Attribute的自定义集合

我有一个简单的类inheritance自Collection并添加了几个属性。 我需要将此类序列化为XML,但XMLSerializer忽略了我的其他属性。 我假设这是因为XMLSerializer提供ICollection和IEnumerable对象的特殊处理。 围绕这个最好的方法是什么? 这是一些示例代码: using System.Collections.ObjectModel; using System.IO; using System.Xml.Serialization; namespace SerialiseCollection { class Program { static void Main(string[] args) { var c = new MyCollection(); c.Add(“Hello”); c.Add(“Goodbye”); var serializer = new XmlSerializer(typeof(MyCollection)); using (var writer = new StreamWriter(“test.xml”)) serializer.Serialize(writer, c); } } [XmlRoot(“MyCollection”)] public class MyCollection : Collection { [XmlAttribute()] public string MyAttribute […]

如果找不到元素,我是否可以在C#中使用XmlSerializer反序列化?

我正在使用XmlSerializer在C#中将对象写入和读取到xml。 我目前使用属性XmlElement和XmlIgnore来操作对象的序列化。 如果我的xml文件缺少我需要的xml元素,我的对象仍然反序列化(xml – > object)就好了。 如何指示(最好通过属性)某个字段是“必需的”? 这是我目前使用的示例方法: [XmlElement(ElementName=”numberOfWidgets”)] public int NumberThatIsRequired { set …; get …; } 我理想的解决方案是添加类似XmlRequired属性的东西。 另外,对于哪些属性可用于操纵XmlSerializer的行为,是否有一个很好的参考?

如何使用XmlSerializer序列化内部类?

我正在建立一个与第三方接口的库。 通过XML和HTTPpost进行通信。 那很有效。 但是,无论代码使用哪个库都不需要知道内部类。 我使用此方法将内部对象序列化为XML: internal static string SerializeXML(Object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType(), “some.domain”); //settings XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; using (StringWriter stream = new StringWriter()) { using (XmlWriter writer = XmlWriter.Create(stream, settings)) { serializer.Serialize(writer, obj); } return stream.ToString(); } } 但是,当我将类的访问修饰符更改为internal ,我在运行时得到一个exception: [System.InvalidOperationException] = {“MyNamespace.MyClass由于其保护级别而无法访问。只能处理公共类型。”} […]

无法序列化成员…因为它是一个接口

我一直有这个问题,一直把头发拉过来。 我有以下错误: exception详细信息:System.NotSupportedException:无法序列化类型为System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress,HannaPrintsDataAccess,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]的成员HannaPrintsDataAccess.Customer.CustomerAddresses,因为它是一个界面。 来源错误: 第196行:客户客户= OperationsManager.Instance.CustomerService.GetCustomer(7); 第197行:第198行:字符串xml = OperationsManager.Instance.CustomerService.GetCustomerAddressesXml(CustomerAddress.FindAll()); 第199行:第200行:订单订单= OperationsManager.Instance.OrderService.CreateOrderFromCart(xml); 源文件:c:\ HostingSpaces \ greetwus \ galadavetiye.com \ wwwroot \ HannaPrints \ HannaPrints \ WebUI \ CreateGreetingCard.aspx.cs行:198 堆栈跟踪: [NotSupportedException:无法序列化类型为System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress,HannaPrintsDataAccess,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]的成员HannaPrintsDataAccess.Customer.CustomerAddresses,因为它是一个接口] [InvalidOperationException:无法序列化’System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress,HannaPrintsDataAccess,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]’类型的成员’HannaPrintsDataAccess.Customer.CustomerAddresses’,有关详细信息,请参阅内部exception。] System.Xml.Serialization.StructModel.CheckSupportedMember(TypeDesc typeDesc,MemberInfo成员,类型类型)+889917 System.Xml.Serialization.StructModel.GetPropertyModel(PropertyInfo propertyInfo)+132 […]

慢SoapHttpClientProtocol构造函数

我正在使用Microsoft Dynamics CRM进行一些实验。 您通过Web服务与它进行交互,并且我已将Web引用添加到我的项目中。 Web服务接口非常丰富,生成的“Reference.cs”大约是90k loc。 我在控制台应用程序中使用Web引用。 我经常改变一些东西,重新编译并运行。 编译很快,但是CrmService service = new CrmService(); Web服务引用非常慢,花费大约15-20秒: CrmService service = new CrmService(); 分析显示所有时间都花在SoapHttpClientProtocol构造函数中。 罪魁祸首显然是XML序列化代码(不包括在上面提到的90k loc中)是在运行时生成的,然后才进行JIT。 这在构造函数调用期间发生。 在玩耍和尝试时,等待是相当令人沮丧的。 我尝试了sgen.exe,ngen和XGenPlus的各种组合(需要几个小时并生成500MB的额外代码),但无济于事。 我已经考虑过实现一个几乎没有CrmService实例的Windows服务,可以在需要的时候发布,但这似乎太过分了。 有任何想法吗?

如何使用.NET XmlSerializer使值类型为空?

让我们假设我有这个对象: [Serializable] public class MyClass { public int Age { get; set; } public int MyClassB { get; set; } } [Serializable] public class MyClassB { public int RandomNumber { get; set; } } XmlSerializer会像这样序列化对象: 0 4234 我怎样才能使该物业成为可空? IE:当它低于0时,没有序列化属性Age? 我尝试使用Nullable,但它将我的对象序列化为: 4234 通过阅读MSDN文档,我发现了这个: 您不能将IsNullable属性应用于键入为值类型的成员,因为值类型不能包含nullNothingnullptra null引用(在Visual Basic中为Nothing)。 此外,对于可为空的值类型,您不能将此属性设置为false。 当这些类型为nullNothingnullptra null引用(在Visual Basic中为Nothing)时,它们将通过将xsi:nil设置为true来序列化。 来源: http : //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx 我理解值类型不能设置为null。 值类型始终设置为某个值。 […]

指定XmlRootAttribute时XmlSerializer性能问题

我目前有一个非常奇怪的问题,我似乎无法弄清楚如何解决它。 我有一个相当复杂的类型,我正在尝试使用XmlSerializer类进行序列化。 这实际上运行正常,类型序列化正确,但似乎需要很长时间这样做; 大约5秒,具体取决于对象中的数据。 经过一些分析后,我把问题缩小了 – 奇怪的是 – 在调用XmlSerializer.Serialize时指定一个XmlRootAttribute。 我这样做是为了将从ArrayOf序列化的集合的名称更改为更有意义的东西。 一旦我删除参数,操作几乎是即时的! 任何想法或建议都会非常好,因为我完全被这个问题所困扰!

如何在使用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吗?