Tag: xml serialization

在序列化XML时更改元素的顺序

我需要将Object序列化为XML并返回。 XML已修复,我无法更改它。 我在bookingList之后无法生成此结构。 如何将这些元素“分组”显示为LIST,并在元素列表之前保留 & 。 看我的例子: 我需要的结构…. 1234567 Jil Sander 1 20 1234567890 2345678901 结构我得到下面的C#代码…. 1234567 Jil Sander 1 1234567890 2345678901 20 C#代码: using System; using System.Xml.Serialization; using System.Collections.Generic; namespace xml_objects_serials { public class bookings { public class nicexml { public string key_id { get; set; } public string surname { get; set; } […]

如何将对象序列化为XDocument?

我有一个标有DataContract属性的类,我想从该类的对象创建一个XDocument。 这是最好的方法吗? 我可以通过XmlDocument来实现,但这似乎是一个不必要的步骤。

没有xsd.exe的XML序列化和架构

我使用XML序列化来读取我的Config-POCO。 要在Visual Studio中获取XML文件的智能感知支持,我需要一个模式文件。 我可以用xsd.exe mylibrary.dll创建架构,这很好用。 但是,如果我将对象序列化到文件系统,我希望始终创建模式。 没有使用xsd.exe有什么办法吗?

抑制xsi:nil但在.Net中序列化时仍然显示空元素

我的ac #class有20多个字符串属性。 我将其中的四分之一设置为实际值。 我想序列化类并获得输出 对于一个财产 public string EmptyAttribute {get;set;} 我不希望输出 我正在使用以下课程 public class XmlTextWriterFull : XmlTextWriter { public XmlTextWriterFull(string filename) : base(filename,Encoding.UTF8) { } public override void WriteEndElement() { base.WriteFullEndElement(); base.WriteRaw(Environment.NewLine); } } 这样我就可以得到完整的标签。 我只是不知道如何摆脱xsi:nil。

序列化和恢复未知类

基础项目包含抽象基类Foo。 在单独的客户端项目中,有一些实现该基类的类。 我想通过调用基类上的一些方法来序列化和恢复具体类的实例: // In the base project: public abstract class Foo { abstract void Save (string path); abstract Foo Load (string path); } 可以假设在反序列化时,存在所有需要的类。 如果可能的话,序列化应该用XML完成。 使基类实现IXmlSerializable是可能的。 我有点卡在这里。 如果我对事物的理解是正确的,那么这只能通过向每个实现类的基类添加[XmlInclude(typeof(UnknownClass))]来实现 – 但实现类是未知的! 有没有办法做到这一点? 我没有反思的经验,但我也欢迎使用它的答案。 编辑:问题是De序列化。 只是序列化会很容易。 🙂

XmlSerialization和xsi:SchemaLocation(xsd.exe)

我使用xsd.exe生成一个C#类来读/写GPX文件。 如何获得生成的XML文件以包含xsi:schemaLocation属性,例如。 我想要以下但xsi:schemaLocation总是丢失

我可以在不实现IXmlSerializable的情况下为XmlSerializer提供自定义序列化吗?

我们正在使用XmlSerializer ,我想为某些类提供自定义序列化。 但是,我并不总是能够修改有问题的类的源代码,否则我可以让它实现IXmlSerializable 。 有没有办法做到这一点?

使用XmlArray反序列化xml文件?

我试图反序列化这个xml结构。 Test Test Test Test 我试过了: [Serializable] [XmlRoot(ElementName = “DietPlan”)] public class TestSerialization { [XmlArray(“Health”)] [XmlArrayItem(“Fruit”)] public string[] Fruits { get; set; } [XmlArray(“Health”)] [XmlArrayItem(“Veggie”)] public string[] Veggie { get; set; } } 但是这引发了一个exception“XML元素已经存在于当前范围内。使用XML属性为元素指定另一个XML名称或命名空间。” 谢谢你。

如何在不事先知道类型的情况下使用XmlSerializer反序列化可能是基类或派生类的对象?

在C#中,如何使用XmlSerializer反序列化可能是基类的对象,或者在不事先知道类型的情况下反序列化任何几个派生类? 我的所有派生类都添加了其他数据成员。 我做了一个简单的GUI,可以序列化和反序列化类对象。 它将序列化对象,因为任何inheritance的类(甚至只是基类)都适合于用户选择填充的字段。 我对序列化没有任何问题; 问题是反序列化。 如何在不事先知道类的情况下将XmlSerializer反序列化数据到正确的派生类? 我目前创建一个XmlReader来读取XML文件的第一个节点并从中确定类,它似乎适用于我的目的,但它似乎是一个非常不优雅的解决方案。 我在下面发布了一些示例代码。 有什么建议? BaseType objectOfConcern = new BaseType(); XmlSerializer xserializer; XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME); do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element); string objectType = xtextreader.Name; xtextreader.Close(); FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open); switch (objectType) { case “type1”: xserializer = new XmlSerializer(typeof(DerivedType)); objectOfConcern = (DerivedType)xserializer.Deserialize(fstream); //Load fields […]

我可以直接将XML序列化为字符串而不是使用C#的流吗?

此示例使用StringWriter来保存序列化数据,然后调用ToString()给出实际的string值: Person john = new Person(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person)); StringWriter stringWriter = new StringWriter(); xmlSerializer.Serialize(stringWriter, john); string serializedXML = stringWriter.ToString(); 有没有更简单/更清洁的方法来做到这一点? 所有Serialize()重载似乎都使用Stream或Writer。 更新:询问有关通过扩展方法序列化IEnumerable的类似问题。