Tag: xml serialization

克隆没有序列化的对象

我在SO处找到了许多解决方案,而且是通过序列化/反序列化(进入内存和返回)处理对象的深层克隆。 它要求克隆的类用[Serializable]标记。 我碰巧把我的类(大部分都是)用[DataContract]标记,因为我使用DataContractSerializer来序列化为XML。 我只引入了[Serializable]属性,因为需要深度克隆其中一些类实例。 但是,现在通过DCS序列化/反序列化发生了一些事情,因为它不再起作用了 – 关于在反序列化时期望不同的XML元素的错误。 如果我删除[Serializable] ,错误就消失了。 我有什么选择? 我只想尽可能简单地深入克隆我的对象。

将.Net对象序列化为json,使用xml属性进行控制

我有一个.Net对象,我已经将其序列化为Xml并使用Xml属性进行修饰。 我现在想将相同的对象序列化为Json,最好使用Newtonsoft Json.Net库。 我想直接从内存中的.Net对象转到Json字符串(不先串行化为Xml)。 我不希望向类中添加任何Json属性,而是希望Json序列化程序使用现有的Xml属性。 public class world{ [XmlIgnore] public int ignoreMe{ get; } [XmlElement(“foo”)] public int bar{ get; } [XmlElement(“marco”)] public int polo{ get; } } 变 { “foo”:0, “marco”:0 }

c#inheritancegenerics集合和序列化

设置: class Item { private int _value; public Item() { _value = 0; } public int Value { get { return _value; } set { _value = value; } } } class ItemCollection : Collection { private string _name; public ItemCollection() { _name = string.Empty; } public string Name { get {return _name;} set {_name […]

序列化为XML时重命名类

我正在尝试序列化下面显示的Outer类,并从序列化的XML创建一个XElement 。 它有一个属于Inner的属性。 我想更改Inner (到Inner_X )和Outer (到Outer_X )的名称。 class Program { static void Main(string[] args) { using (MemoryStream memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { var xmlSerializer = new XmlSerializer(typeof(Outer)); xmlSerializer.Serialize(streamWriter, new Outer()); XElement result = XElement.Parse(Encoding.ASCII.GetString(memoryStream.ToArray())); } } } } [XmlType(“Outer_X”)] public class Outer { public Outer() { this.InnerItem […]

XML反序列化“标准化”行结尾,如何阻止它? (。净)

我有一个带有[XmlText]标记属性的类,它接受多行输入。 在我的XML文件中,我已经validation了文本内容中的行结尾是”\r\n” ,与文件的其余部分相同。 我用来反序列化的代码是: XmlSerializer configSerializer = new XmlSerializer(typeof(WorldList)); string file = “test.xml”; if (File.Exists(file)) { using (TextReader r = new StreamReader(file)) { foo = configSerializer.Deserialize(r); } } 但是,在[XmlText]属性的setter中, value已经以”\n”作为行结尾。 这很烦人的主要原因是因为”\n”行结尾在TextBox无法正确显示…我不确定哪个部分导致了这些问题,但我认为这里有人可能能够解决问题关于这种情况。

XmlSerializer属性转换器

假设我们有一个可以由XmlSerializer序列化/反序列化的类。 它会是这样的: [XmlRoot(“ObjectSummary”)] public class Summary { public string Name {get;set;} public string IsValid {get;set;} } 我们有一个xml,如下所示: some name Y 使用布尔属性IsValid而不是字符串属性是更好的决定,但在这种情况下,我们需要添加一些额外的逻辑来将数据从字符串转换为bool。 解决此问题的简单直接方法是使用其他属性并将一些转换逻辑放入IsValid getter中。 谁能建议更好的决定? 以某种方式或类似的方式在属性中使用类型转换器?

序列化System.Windows.Media.ImageSource对象

我正在创建一个非常基本的聊天应用程序 我用tcp连接建立聊天。 我经常通过网络流发送序列化对象,因为这样编程更简单。 无论如何,如果我有一个class person{ public string name{get;set;} }那么它将是eassy序列化该类。 当我包含一个public ImageSource Img {get;set;}我无法再序列化该类人员。 我序列化的方式是: Person p = new Person(); p.name = \\some name p.Img = \\ some image System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType()); x.Serialize(connection.stream, p);//here is when the problem comes. I am not able to serialize it if I include an Img

如何在C#中序列化/反序列化可选的XML枚举?

我试图弄清楚如何将XML列表序列化/反序列化为C#,它具有枚举类型的可选属性。 以下是我的C#类: public class AttributeAssignmentExpressionElement : XACMLElement { [XmlAttribute] public string AttributeId { get; set; } [XmlAttribute] public Category Category { get; set; } } 我的Category枚举定义如下: public enum Category { [XmlEnum(Name = “urn:oasis:names:tc:xacml:1.0:subject-category:access-subject”)] Subject, [XmlEnum(Name = “urn:oasis:names:tc:xacml:3.0:attribute-category:resource”)] Resource, [XmlEnum(Name = “urn:oasis:names:tc:xacml:3.0:attribute-category:action”)] Action, [XmlEnum(Name = “urn:oasis:names:tc:xacml:3.0:attribute-category:environment”)] Environment } 当Category出现在相应的XML文件中时,序列化/反序列化按预期工作。 但是,如果XML中缺少Category ,则使用默认值(枚举中的第一项)。 如果我尝试使枚举变量可以为空( Category? ),则反序列化器会抛出exception,因为它无法反序列化复杂类型。 给定以下XML(不包含该属性),如何正确地序列化枚举? 在这种情况下,反序列化对象中的值应为null。 […]

在根元素中使用XmlSerializer和数组

我有一个类似于以下的XML文档: … … … 我希望使用System.Xml.Serialization属性来简化XML反序列化。 我遇到的问题是我无法弄清楚如何指定根节点包含一个数组。 我尝试过创建以下类: [XmlRoot(“scan_details”)] public class ScanDetails { [XmlArray(“object”)] public ScanDetail[] Items { get; set; } } public class ScanDetail { [XmlAttribute(“name”)] public string Filename { get; set; } } 但是,当我将XML反序列化为ScanDetails对象时, Items数组保持为null 。 如何反序列化根节点中的数组?

如何在XML序列化中插入XML注释?

我想在我的xml文件的顶部添加一些用于读取它的用户的注释。 我不知道如何使用xml序列化来做到这一点。 我在看这篇文章 C#XML在xml标记之后将注释插入XML XDocument document = new XDocument(); document.Add(new XComment(“Product XY Version 1.0.0.0”)); using (var writer = document.CreateWriter()) { serializer.WriteObject(writer, graph); } document.Save(Console.Out); 但我不确定发生了什么以及如何将其添加到我的代码中。 基本上我只有一些类,我将其序列化为xml并将其粘贴在内存流中。 所以我不确定我应该在什么时候添加评论。 谢谢 码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; namespace ConsoleApplication1 { [XmlRoot(“Course”)] public class MyWrapper { public MyWrapper() { TaskList = new List(); } […]