Questions tagged «xml-serialization»

该标签指的是使用XML作为数据格式的序列化技术。

18
XmlSerializer在构造函数中提供FileNotFoundException
我尝试使用的应用程序在尝试序列化类型时失败。 像这样的声明 XmlSerializer lizer = new XmlSerializer(typeof(MyType)); 产生: System.IO.FileNotFoundException occurred Message="Could not load file or assembly '[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified." Source="mscorlib" FileName="[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" FusionLog="" StackTrace: at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, …

10
将对象序列化为字符串
我有以下方法将对象保存到文件: // Save an object out to the disk public static void SerializeObject<T>(this T toSerialize, String filename) { XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType()); TextWriter textWriter = new StreamWriter(filename); xmlSerializer.Serialize(textWriter, toSerialize); textWriter.Close(); } 我承认我没有编写它(我仅将其转换为带有类型参数的扩展方法)。 现在,我需要它来将xml作为字符串返回给我(而不是将其保存到文件中)。我正在研究它,但尚未弄清楚。 我认为这对于熟悉这些对象的人可能真的很容易。如果没有,我最终会解决。

17
将对象序列化为XML
我有一个继承的C#类。我已经成功“构建”了对象。但是我需要将该对象序列化为XML。有一个简单的方法吗? 看起来该类已设置为进行序列化,但是我不确定如何获取XML表示形式。我的课程定义如下: [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)] public partial class MyObject { ... } 这是我以为可以做的,但是不起作用: MyObject o = new MyObject(); // Set o properties string xml = o.ToString(); 如何获得该对象的XML表示形式?

12
{“ <user xmlns =''>不是预期的。}反序列化Twitter XML
我正在通过OAuth从Twitter提取XML。 我正在向http://twitter.com/account/verify_credentials.xml发送请求,该请求返回以下XML: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;user&gt; &lt;id&gt;16434938&lt;/id&gt; &lt;name&gt;Lloyd Sparkes&lt;/name&gt; &lt;screen_name&gt;lloydsparkes&lt;/screen_name&gt; &lt;location&gt;Hockley, Essex, UK&lt;/location&gt; &lt;description&gt;Student&lt;/description&gt; &lt;profile_image_url&gt;http://a3.twimg.com/profile_images/351849613/twitterProfilePhoto_normal.jpg&lt;/profile_image_url&gt; &lt;url&gt;http://www.lloydsparkes.co.uk&lt;/url&gt; &lt;protected&gt;false&lt;/protected&gt; &lt;followers_count&gt;115&lt;/followers_count&gt; &lt;profile_background_color&gt;9fdaf4&lt;/profile_background_color&gt; &lt;profile_text_color&gt;000000&lt;/profile_text_color&gt; &lt;profile_link_color&gt;220f7b&lt;/profile_link_color&gt; &lt;profile_sidebar_fill_color&gt;FFF7CC&lt;/profile_sidebar_fill_color&gt; &lt;profile_sidebar_border_color&gt;F2E195&lt;/profile_sidebar_border_color&gt; &lt;friends_count&gt;87&lt;/friends_count&gt; &lt;created_at&gt;Wed Sep 24 14:26:09 +0000 2008&lt;/created_at&gt; &lt;favourites_count&gt;0&lt;/favourites_count&gt; &lt;utc_offset&gt;0&lt;/utc_offset&gt; &lt;time_zone&gt;London&lt;/time_zone&gt; &lt;profile_background_image_url&gt;http://s.twimg.com/a/1255366924/images/themes/theme12/bg.gif&lt;/profile_background_image_url&gt; &lt;profile_background_tile&gt;false&lt;/profile_background_tile&gt; &lt;statuses_count&gt;1965&lt;/statuses_count&gt; &lt;notifications&gt;false&lt;/notifications&gt; &lt;geo_enabled&gt;false&lt;/geo_enabled&gt; &lt;verified&gt;false&lt;/verified&gt; &lt;following&gt;false&lt;/following&gt; &lt;status&gt; &lt;created_at&gt;Mon Oct 12 19:23:47 +0000 2009&lt;/created_at&gt; &lt;id&gt;4815268670&lt;/id&gt; &lt;text&gt;&amp;#187; @alexmuller …

14
将XML字符串转换为对象
我正在通过套接字接收XML字符串,并希望将它们转换为C#对象。 消息的形式为: &lt;msg&gt; &lt;id&gt;1&lt;/id&gt; &lt;action&gt;stop&lt;/action&gt; &lt;/msg&gt; 我是.Net的新手,不确定执行此操作的最佳实践。我以前使用过Java的JAXB,但不确定是否存在类似的东西,或者是否会以其他方式处理。

4
为什么XML-Serializable类需要无参数构造函数
我正在编写代码以进行Xml序列化。具有以下功能。 public static string SerializeToXml(object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, obj); return writer.ToString(); } } 如果参数是没有无参数构造函数的类的实例,则它将引发异常。 未处理的异常:System.InvalidOperationException:CSharpConsole.Foo无法序列化,因为它没有无参数的构造函数。在System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo源,Boolean directReference,Boolean throwOnError)在System.Xml.Serialization.ModelScope.GetTypeModel(Type type, System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type,XmlRootAttribute root,String defaultNamespace)在System.Xml.Serialization.XmlSerializer..ctor(Type type,String defaultName space)在System.Xml.Serialization。 XmlSerializer..ctor(类型类型) 为什么必须有一个无参数的构造函数才能使xml序列化成功? 编辑:感谢cfeduke的回答。无参数构造函数可以是私有的或内部的。

7
是否可以将XML反序列化为List <T>?
给定以下XML: &lt;?xml version="1.0"?&gt; &lt;user_list&gt; &lt;user&gt; &lt;id&gt;1&lt;/id&gt; &lt;name&gt;Joe&lt;/name&gt; &lt;/user&gt; &lt;user&gt; &lt;id&gt;2&lt;/id&gt; &lt;name&gt;John&lt;/name&gt; &lt;/user&gt; &lt;/user_list&gt; 和以下类: public class User { [XmlElement("id")] public Int32 Id { get; set; } [XmlElement("name")] public String Name { get; set; } } 是否可以使用XmlSerializer将XML反序列化为List&lt;User&gt;?如果是这样,我需要使用哪种类型的附加属性,或者我需要使用哪些附加参数来构造XmlSerializer实例? User[]如果不太理想,则可以使用数组()。

5
实现IXmlSerializable的正确方法?
程序员决定实施后IXmlSerializable,实施的规则和最佳做法是什么?我听说GetSchema()应该返回,null并且ReadXml应该在返回之前移至下一个元素。这是真的?怎么样WriteXml-它应该为对象编写一个根元素,还是假定该根已经被写入?应该如何对待和书写子物件? 这是我现在所拥有的样本。我会在收到良好回应后对其进行更新。 public class MyCalendar : IXmlSerializable { private string _name; private bool _enabled; private Color _color; private List&lt;MyEvent&gt; _events = new List&lt;MyEvent&gt;(); public XmlSchema GetSchema() { return null; } public void ReadXml(XmlReader reader) { if (reader.MoveToContent() == XmlNodeType.Element &amp;&amp; reader.LocalName == "MyCalendar") { _name = reader["Name"]; _enabled = Boolean.Parse(reader["Enabled"]); …

5
在.NET中序列化对象时,是否省略所有xsi和xsd命名空间?
代码如下: StringBuilder builder = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings)) { XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); s.Serialize(xmlWriter, objectToSerialize); } 生成的序列化文档包括名称空间,如下所示: &lt;message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns="urn:something"&gt; ... &lt;/message&gt; 要删除xsi和xsd命名空间,我可以按照如何将对象序列化为XML而不得到xmlns =”…”的回答。。 我希望我的消息标签为&lt;message&gt;(没有任何名称空间属性)。我怎样才能做到这一点?

4
XmlSerializer:删除不必要的xsi和xsd命名空间
有没有一种方法可以配置XmlSerializer,以使其不在根元素中写入默认名称空间? 我得到的是: &lt;?xml ...&gt; &lt;rootelement xmlns:xsi="..." xmlns:xsd="..."&gt; &lt;/rootelement&gt; 而且我想删除两个xmlns声明。 复制:如何在不获取xmlns =”…”的情况下将对象序列化为XML?

7
XML序列化-隐藏空值
使用标准的.NET Xml序列化器时,有什么方法可以隐藏所有空值?下面是我的类输出的示例。我不想输出可为空的整数,如果它们设置为null。 当前Xml输出: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;myClass&gt; &lt;myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /&gt; &lt;myOtherInt&gt;-1&lt;/myOtherInt&gt; &lt;/myClass&gt; 我想要的是: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;myClass&gt; &lt;myOtherInt&gt;-1&lt;/myOtherInt&gt; &lt;/myClass&gt;


19
.NET XML序列化陷阱?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 在进行我想分享的C#XML序列化时,遇到了一些陷阱: 您无法序列化只读项(例如KeyValuePairs) 您无法序列化通用词典。相反,请尝试以下包装器类(来自http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx): using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary&lt;TKey, TValue&gt; : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable { public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); …

4
在.NET中将对象序列化为UTF-8 XML
为了简洁起见,删除了正确的对象处理方法,但是如果这是将对象编码为内存中的UTF-8的最简单方法,我会感到震惊。必须有一种更简单的方法吗? var serializer = new XmlSerializer(typeof(SomeSerializableObject)); var memoryStream = new MemoryStream(); var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8); serializer.Serialize(streamWriter, entry); memoryStream.Seek(0, SeekOrigin.Begin); var streamReader = new StreamReader(memoryStream, System.Text.Encoding.UTF8); var utf8EncodedXml = streamReader.ReadToEnd();


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.