Tag: xml serialization

如何使用XSD.exe从C#类型生成XML Schema,以便属性映射到所需的XML属性?

简单地说,当我使用XSD.exe(Visual Studio 2012附带)从这个类生成XML模式文件时: [Serializable] public class Person { [XmlAttribute] public string Name { get; set; } [XmlAttribute] public int Age { get; set; } } 我得到了这个结果: 请注意, Age属性在生成的模式中指定为必需(它具有use =“required” ),而属性Name不是。 我像这样使用XSD.exe: xsd.exe Sample.exe /type:Person 其中Sample.exe是.NET程序集,其中定义了Person类。 我想以某种方式在我的类中指定哪些XmlAttribute属性是必需的,哪些不是这样XSD.exe可以自动生成模式。 这可能吗?

一个列表中多个对象类型的XmlSerialization

我有一个对象有一个抽象的’aninamls’列表。 即 var animals = new Animals { new Bird{ TailFeatherColour = “Blue” }, new Cat{ Colour = “Brown” } }; 使用xmlserializer,是否可以将上面的序列化为以下xml, Blue Brown 目前,我只能得到以下内容: Blue Brown

存储XML中的自定义应用程序设置

请帮忙。 我有这个代码,这是我的类序列化\反序列化应用程序设置。 [XmlRoot(“EvaStartupData”)] [Serializable] public class MyConfigClass { public string ServerName { get; set; } public string Database { get; set; } public string UserName { get; set; } public string UserLogin { get; set; } public static void MyConfigLoad() { FileInfo fi = new FileInfo(myConfigFileName); if (fi.Exists) { XmlSerializer mySerializer = new XmlSerializer(myConfigClass.GetType()); StreamReader […]

XmlSerialization与单身

序列化的困境继续 …… 我正在尝试序列化一个类,这些类的实例在它们之间共享公共对象(各种类型的绑定器)。 因此,对象A,B,C共享对象Binder1,对象D和E – Binder2等等……我正在序列化对象A,B,C,D,E。 通常,此绑定器对象在构造函数中传递 – 而不是使用序列化程序,因为它需要无参数构造函数。 ISeriazable似乎有一些适用于单例的东西 – IObjectReference接口,其中方法GetRealObject可用于返回对新创建的单例的引用。 但是,它看起来不像XmlSerializer关心这个接口。 那么,我应该如何序列化/反序列化这些对象呢? 编辑 :我几乎已经准备好放弃这个问题,因为我刚刚在两个巨头@JonSkeet和@MarcGravell之间的2006年(!!) 论坛上发现了这个问题 ,其中XmlSerializer的答案基本上没有 。 为了防止过去7年的情况发生变化,我会将此问题保持更长时间。

可移植类库,XmlAnyElementAttribute

在可移植类库中 ,我有一个包含具有XmlAnyElement属性的成员的类。 public partial class VariableWebServiceResponse { private List anyField; public VariableWebServiceResponse () { this.anyField = new List(); } [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] public List Any { get { return this.anyField; } set { this.anyField = value; } } } 这种类在.NET 4.0中完美运行,因此我的代码如下: private T Deserialize(VariableWebServiceResponse response) { var name = typeof(T).Name; var element = response.Any.SingleOrDefault(x => x.Name == […]

使用&符号使用XmlSerializer()反序列化XML

当XML具有“Lord&Hogan”等数据时,以下代码会中断。 有什么建议? 谢谢,肯 private T GetResponse(String apiObject, String query) { //Deserialize XML into the type specified. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(BuildRequestUri(apiObject, query)); using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) { try { XmlSerializer ser = new XmlSerializer(typeof(T)); return (T)ser.Deserialize(resp.GetResponseStream()); } catch (Exception e) { error = e.InnerException.ToString(); return default(T); } } }

在XML文件中包含二进制数据

我们需要在xml文件中上传附件(例如word文档)。 有没有办法附上这个? 任何使用c#的示例代码都将受到赞赏。

不要从序列化的DateTime对象序列化或删除TimeZone

我给出的奇怪任务是使用XML Serialization序列化LARGE对象。 此对象包含多个嵌套的UserDefined类,具有多个DateTime字段。 DateTime数据的要求是它必须始终显示在最初创建和设置数据的用户的TimeZone中。 因此,我无法使用UTC或本地时间,因为在反序列化时,它们将不会与它们相同。 我也无法以UTC显示值,它们必须以本地时间显示。 我需要的是一些奇怪的序列化格式,代表“绝对本地时间”的概念……即“没有TimeZone的本地时间”。 我可以使用正则表达式从日期字符串中删除TZ,这很容易。 但是我正在处理的对象的庞大大小意味着我经常会得到一个OutOfMemoryException。 我看着它在没有调试的情况下运行一次,并且在操作过程中我使用的内存从100k增加到800k。 不太好。 那是一个较小的文件。 Doc.DocumentElement.InnerXML = Regex.Replace(Doc.DocumentElement.InnerXML, “(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(\\+|-)(\\d{2}:\\d{2})”, “$1”) 到目前为止,我看到的唯一选项是创建所有dateTime字段的副本,将DT字段本身设置为“XmlIgnore()”,然后在重新加载文档后手动恢复序列化字符串数据中的所有日期。 这也不实用。 请参见自定义DateTime XML序列化 有没有办法强制序列化引擎在没有TimeZone数据的情况下序列化DateTime对象? 优选地,通用的东西不必单独应用于对象中的每个DT属性? !!编辑!! 我可能找到了部分解决方案。 它至少可以帮助前进。 DateTimeKind.Unspecified,在序列化时,似乎没有附加任何TimeZone数据。 这是我正在寻找的解决方案。 使用DateTime.SpecifyKind强制转换我的所有DateTime数据? public DateTime? StartDate { get { return _StartDate; } set { if (_StartDate == value) return; if (value != null) _StartDate = DateTime.SpecifyKind(value.Value, DateTimeKind.Unspecified); else _StartDate […]

Xml序列化序列问题

通常,这一切都非常适合将我的对象序列化为Xml字符串并再次返回到对象中。 但是,我在不同的最终用户之间存在这种不一致,我似乎无法追查。 基本上,当我序列化一个对象时,它看起来像转换为Xml后: Step 2 20 Motor 450 KW Pump 1 400 Volt 3 Phase 12w 50Hz 400 415 Wye 3 231/400v F true 50 0.8000 false false F true KWm 0 0.90 450 false NEMA VariableFrequencyDrive F 0 5.3 Motor 450 KW Pump 1 400 Volt 3 Phase 12w 50Hz 400 415 Wye 3 […]

反序列化XML文件而不将其全部加载到内存中

假设您的应用程序使用XmlSerializer序列化对象。 当应用程序的另一部分(例如外部服务或其他组件)处理该xml文件时,会返回一个巨大的xml文件,该文件是一个巨大对象的序列化。 在不填充服务器内存的情况下,反序列化和处理响应的方法是什么? 我通常更喜欢使用XmlSerializer,但是当我必须对抗这些怪物时,我没有防弹解决方案。 我已经阅读了有关XNode.ReadFrom的内容,但我想知道如果使用这种方法,我可以像流式反序列化那样完成。 谢谢,马可