Tag: 序列化

使用C#.NET处理XML中的禁用字符

我有一个对象,我正在序列化为xml。 似乎其中一个属性中的值包含hex字符0x1E。 我已经尝试将XmlWriterSettings的Encoding属性设置为“utf-16”和“unicode”,但我仍然会抛出exception: 这是生成XML文档的错误。 —> System.InvalidOperationException:生成XML文档时出错。 —> System.ArgumentException:”,hex值0x1E,是无效字符。 有没有办法让这些字符进入xml? 如果没有,是否还有其他字符会导致问题?

序列化assembly。 是否需要?

我有一个.net 2.0 c#ClickOnce应用程序,它通过Web服务连接到它的数据。 我被告知可能加速应用程序的一种方法是事先生成序列化程序集。 我在这方面有几个问题。 是否生成序列化程序集的默认设置是Auto。 VS2005使用什么标准来决定是否生成序列化程序集? 看起来它不会在Debug配置下生成,但它在Release配置下生成,但我无法确定并且无法在任何地方获取信息。 序列化程序集实际上是否改善了应用程序的启动? 具体来说它有什么改进? 我真的需要序列化程序集吗?

在.NET中序列化大量链接的数据(自定义JSON.NET引用)

我希望在序列化数据时避免重新发明轮子。 我知道一些方法来序列化彼此链接的对象,但它的范围从编写一些代码到编写大量代码进行序列化,我想避免这种情况。 必须有一些通用的解决方案。 假设我有这样的结构: Person bro = new Person { name = “bro”, pos = new Pos { x = 1, y = 5 } }, sis = new Person { name = “sis”, pos = new Pos { x = 2, y = 6 } }, mom = new Person { name = “mom”, […]

如何在没有架构信息的情况下将c#对象序列化为xml?

这就是我做的: Serializable类: [Serializable()] public class Ticket { public string CitationNumber { get; set; } public decimal Amount { get; set; } } 然后将模型序列化为xml: var model = cart.Citations .Select(c => new Ticket(c.Number, c.Amount)).ToList(); var serializer = new XmlSerializer(typeof (List)); var sw = new StringWriter(); serializer.Serialize(sw, model); return sw.ToString(); 输出sw.ToString()就像 00092844 20 有没有办法自定义Serialize()输出以删除那些架构信息,如: 和xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” ? 如何将根元素ArrayOfTicket更改为其他内容? […]

XML与序列化/反序列化的二进制性能

我正在开发一个紧凑的框架应用程序,需要提高性能。 该应用程序当前通过将对象序列化为XML并将其存储在数据库中而脱机工作。 使用分析工具,我可以看到这是一个相当大的开销,减慢了应用程序。 我想如果我切换到二进制序列化,性能会增加,但因为在紧凑框架中不支持,我看了protobuf-net。 序列化似乎更快,但反序列化要慢得多,并且应用程序比串行化更多地反序列化。 二进制序列化应该更快,如果是这样,我可以做些什么来加快性能? 这是我如何同时使用XML和二进制文件的片段: XML序列化: public string Serialize(T obj) { UTF8Encoding encoding = new UTF8Encoding(); XmlSerializer serializer = new XmlSerializer(typeof(T)); MemoryStream stream = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8); serializer.Serialize(stream, obj); stream = (MemoryStream)writer.BaseStream; return encoding.GetString(stream.ToArray(), 0, Convert.ToInt32(stream.Length)); } public T Deserialize(string xml) { UTF8Encoding encoding = new UTF8Encoding(); XmlSerializer […]

方法是否也与.NET中的数据成员一起序列化?

标题很明显,我需要知道方法是否与C#中的对象实例一起序列化,我知道它们不是用Java编写的,但我对C#有点新。 如果他们不这样做,我是否必须将原始类与字节流(序列化对象)放在一个包中,然后将其发送到另一台PC? 原始类可以像DLL文件一样吗?

在Json.net中获取错误“无法在Newtonsoft.Json.Linq.JProperty中添加或删除项”

所以我试图通过将json对象作为JObject读取,删除一些字段,然后使用Json.Net将其再次反序列化为我的目标对象来控制反序列化 。 问题是,每次我尝试删除字段时,都会收到错误: Newtonsoft.Json.dll中出现未处理的“Newtonsoft.Json.JsonException”类型exception 其他信息:无法添加或删除Newtonsoft.Json.Linq.JProperty中的项目。 这是我的(简化但仍然导致错误)代码: JToken token = (JToken)JsonConvert.DeserializeObject(File.ReadAllText(fileName)); foreach (JToken inner in token[“docs”]) { if (inner[“_id”] != null) inner[“_id”].Remove(); MyObject read = new MyObject(); JsonConvert.PopulateObject(inner.ToString(), read); Values.Add((MyObject)JsonConvert.DeserializeObject(inner.ToString(), typeof(MyObject))); } json是一个非常大的文件,其中docs数组包含许多元素,如下所示(为简洁起见,再次简化): { “docs”: [ { “Time”: “None”, “Level”: 1, “_id”: “10208” }, { “Time”: “None”, “Level”: 1, “_id”: “10209” } ] } 或者,如果有更好的方法将JSON反序列化为特定类型,但仍然忽略其他字段,那将是一个很好的选择。

在C#中反序列化JSON数组(或列表)

这是基本代码: public static string DeserializeNames() { jsonData = “{\”name\”:[{\”last\”:\”Smith\”},{\”last\”:\”Doe\”}]}”; JavaScriptSerializer ser = new JavaScriptSerializer(); nameList myNames = ser.Deserialize(jsonData); return ser.Serialize(myNames); } //Class descriptions public class name { public string last { get; set; } } public class nameList { public List { get; set; } } 我试过了: nameList myNames = ser.Deserialize(jsonData); 和: List myNames = […]

为什么必须用属性标记一个类?

看到您可以将任何文档转换为字节数组并将其保存到磁盘,然后将文件重建为其原始格式(只要您的文件名包含元数据等)。 你为什么要用[Serializable]等标记一个类? 这是一个相同的想法,“元数据”类型信息,所以当你将对象转换为它的类时,事物是否正确映射?

如何在C#中将JSON对象序列化或反序列化到某个深度?

我只想要一个对象的第一个深度级别(我不想要任何孩子)。 我愿意使用任何可用的库。 大多数库只会在达到递归深度时抛出exception,而不是仅仅忽略。 如果这是不可能的,有没有办法忽略给定某种数据类型的某些成员的序列化? 编辑:假设我有一个像这样的对象: class MyObject { String name = “Dan”; int age = 88; List myChildren = …(lots of children with lots of grandchildren); } 我想删除任何子(甚至复杂类型)以返回这样的对象: class MyObject { String name = “Dan”; int age = 88; List myChildren = null; }