Tag: xml serialization

序列化数组时如何使用XmlAttributeOverrides?

我有一个名为_updatedComponents的数组,这些对象属于NetworkComponent类。 我必须以更改根元素(=数组)的名称和命名空间以及将单个NetworkComponent-item的名称更改为组件的方式对其进行序列化。 我有一个下面的代码导致exception: System.InvalidOperationException:存在反映类型’ComponentSyncService.NetworkComponent []’的错误。 —> System.InvalidOperationException:可能没有为ComponentSyncService.NetworkComponent []类型指定XmlRoot和XmlType属性。 码: XmlAttributeOverrides xaos = new XmlAttributeOverrides(); // the array itself aka the root. change name and namespace XmlElementAttribute xea = new XmlElementAttribute(_updatedComponents.GetType()); xea.Namespace = “http://www.example.com/nis/componentsync”; xea.ElementName = “components”; XmlAttributes xas = new XmlAttributes(); xas.XmlElements.Add(xea); xaos.Add(_updatedComponents.GetType(), xas); // then the items of the array. just change the name […]

如何更改此XML字符串以便XDocument.Parse读取它?

在以下代码中,我将对象序列化为XML 字符串 。 但是当我尝试使用XDocument.Parse将此XML字符串读入XDocument时,它会给我这个错误 : 根级别的数据无效。 XML是: 1 Jim Jones 23434 更新:这是hex: ![alt text][1] Mod edit – 禁用超链接:指向恶意软件的链接 我该如何处理这个XML,以便它在没有错误的情况下读入XDocument? using System; using System.Collections.Generic; using System.Xml.Serialization; using System.IO; using System.Xml; using System.Text; using System.Xml.Linq; namespace TestSerialize2342 { class Program { static void Main(string[] args) { List customers = Customer.GetCustomers(); Console.WriteLine(“— Serializing ——————“); foreach (var customer in […]

XmlSerializer和List 具有默认值

我在序列化时观察到一种奇怪的行为,而不是反序列化具有List类型成员的类,该类在构造时填充了默认值。 与基于数组的属性不同, List类型的属性在XmlSerializer的反序列化时不会被清空。 这是我的代码: public class Program { public class Config { public Config() { Test1 = new List() {“A”, “B”}; Test2 = new String[] {“A”, “B”}; } public List Test1 {get;set;} public string[] Test2 {get;set;} } public static void Main() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(Config)); using(Stream s = new MemoryStream()) { xmlSerializer.Serialize(s, new […]

如何序列化包含其他类对象的类(递归序列化?)

我怎样才能做到这一点? 或者序列化程序会自动进行递归,并将所有这些子对象序列化为XML吗? 举个例子,如何序列化包含其他类对象的类本身! 这是这个问题的核心! 我试过这个,并没有向目标XML文件输出任何内容 (XML头除外)。 我的问题是我需要序列化一个简单的类,它只包含一个List对象。 但是,这些实体也是Lod List对象。 (另一个好处是,如果我可以避免某些组件的序列化,因为一些组件是派生的并且在其中包含字典)。 public void SaveCurrent(string MapFileName) { string MapPath = world_.game_.Content.RootDirectory + “/Maps/” + MapFileName + “.xml”; StreamWriter MapWriter = new StreamWriter(MapPath); Map SavedMap = new Map(); SavedMap.Entities = world_.Entities; XmlSerializer xSerializer = new XmlSerializer(SavedMap.GetType()); xSerializer.Serialize(MapWriter, SavedMap); MapWriter.Close(); } 这是进行序列化的代码片段。 public class Map { internal string MapName; […]

如何在C#中序列化期间为数组赋予属性?

我正在尝试生成像这样创建XML片段的C#。 11:22:33:44:55:66:77:88 11:22:33:44:55:66:77:89 11:22:33:44:55:66:77:8A 我在考虑使用这样的东西: [XmlArray( “device_list” ), XmlArrayItem(“item”)] public ListItem[] device_list { get; set; } 作为属性,具有此类声明: public class ListItem { [XmlAttribute] public string type { get; set; } [XmlText] public string Value { get; set; } } 这给了我内部序列化,但我不知道如何将type=”list”属性应用于上面的device_list 。 我正在考虑(但不确定如何编写语法)我需要做的事情: public class DeviceList { [XmlAttribute] public string type { get; set; } [XmlArray] public […]

XmlSerializer:“类型’类型’可能不会在此上下文中使用”

我试图弄清楚如何使用XmlSerializer序列化任何类,而不使用XmlInclude属性。 一般工作,但使用以下代码我得到一个例外: using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Xml.Serialization; namespace Test { public class ReactObject { } public class ReactListObject : ReactObject { } public class ReactList : ReactObject, ICollection, IList { public ReactList() { } public virtual void AddRange(IEnumerable values) { } [XmlArray(ElementName = “Items”, IsNullable = […]

基于xsd模式生成xml(使用.NET)

我想根据我的xsd架构(cap.xsd)生成一个xml文件。 我找到了这篇文章,并按照说明操作: 使用XSD文件生成XML文件 我已经在xsd.exe的帮助下创建了这个类,并通过拖放到我的解决方案中插入它 之后,我构建了我的解决方案并创建了xml。 但它不基于xsd架构。 xml文件有一个包含字符的元素,但架构说必须有数字(double) 无论如何,我没有看到xsd架构对生成的xml有什么影响? 如果删除架构,则仍会创建xml文件。 并且在此行创建了xml文件: var data = new Program {Time =“abc”,Source =“443543253243”,}; ..而不是我的架构: 怎么了? 我的课: namespace testapp { using System.IO; using System.Xml.Serialization; public class Program { public string Time; public string Source; public static void Main() { var data = new Program { Time = “abc”, Source = “buffalo”, […]

XmlSerializer,“指定”后缀和IReflect

我发现如果可序列化的Field / Property有一个Boolean类型的相应字段,其字段名称为“Specified”后缀,则XmlSerializer有条件地从序列化过程中排除该字段/属性 。 太好了! 所以,我想避免这些字段的定义,并在运行时动态添加它们…… 阅读本文 ,我发现了一个有趣的界面IReflect ,我可以用它来“模拟”XmlSerializer实例用来排除某些字段的动态字段。 这会有用吗?

如何以XML方式在winform中显示Xml数据?

我的winform应用程序与Web服务通信。 对于某些要求,我需要在winform应用程序中以XML格式显示Web服务响应。 我可以将响应类型(类)实例序列化为XML字符串。 但是当我在富文本框中显示该字符串时,它显然显示为连续字符串; 而不是如下所示的XML。 – – 0 Loggerr -1 U MyLogger – – 0 Logger2 -1 U MyLogger2 这里, UserServiceAccesses是具有UserServiceAccess类型属性的类。 然后UserServiceAccess具有Service , ClientPermissions类型的属性 我该怎么做? 它可以是任何forms(树,表,文本等),但它应该是可读的XML。 由于我们从应用程序调用了许多Web方法,因此每次XML结构都会有所不同,因此我们无法确定模式。

如何使用XML序列化更改XML根名称?

我正在尝试使用C#进行XML序列化时更改根名称。 它总是需要类名,而不是我试图设置的名称。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { MyTest test = new MyTest(); test.Test = “gog”; List testList = new List() { test }; SerializeToXML(testList); } static public void SerializeToXML(List list) { XmlSerializer serializer = new XmlSerializer(typeof(List)); TextWriter […]