Tag: 序列化

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

我怎样才能做到这一点? 或者序列化程序会自动进行递归,并将所有这些子对象序列化为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; […]

为什么SerializationInfo没有TryGetValue方法?

在C#中实现ISerializable接口时,我们提供了一个构造函数,该构造函数接受SerializationInfo对象,然后使用各种GetInt32 , GetObject等方法对其进行查询,以填充我们尝试反序列化的对象的字段。 实现此接口的一个主要原因,而不仅仅是使用[Serializable]属性,是为了向后兼容:如果我们在某个时刻向类中添加了新字段,我们可以捕获由序列化的旧版本引发的SerializationException 。类,并以适当的方式处理它们。 我的问题如下:为什么我们必须将这些例外用于控制流程? 如果我反序列化前一段时间保存的大量类,可能每个类中的每个缺失字段都会抛出exception,从而导致性能非常差。 为什么SerializationInfo类不提供TryGetValue方法,如果名称字符串不存在,它们只返回false ?

在JSON.NET中序列化派生类时的字段顺序

考虑这两个类: public Class Base { public string Id {get; set;} public string Name {get; set;} public string LastName {get; set;} } 派生类: public Class Derived : Base { public string Address {get; set;} public DateTime DateOfBirth {get; set;} } 使用Json.Net序列化Derived类 时 : Derived record = new Derived record(); {// Initialize here…} JsonConvert.SerializeObject(record); 默认情况下, Derived类的属性首先出现: { […]

注意事项将C#字符串编码为Javascript字符串

我正在尝试为我的项目编写一个自定义的Javascript MVC3 Helper类,其中一个方法应该将C#字符串转义为Javascript字符串。 我知道C#字符串是UTF-16编码的 ,Javascript字符串似乎也是UTF-16 。 这里没问题。 我知道一些字符,如反斜杠,单引号或双引号必须在Javascript上反斜杠转义,所以: \ becomes \\ ‘ becomes \’ ” becomes \” 在编写转换方法之前,我是否还有其他需要注意的警告? 编辑:到目前为止很棒的答案,我在问题的答案中添加一些参考资料,以帮助其他人。 Alex K.建议使用System.Web.HttpUtility.JavaScriptStringEncode ,我将其标记为正确的答案,因为我使用的是.Net 4.但是这个function以前的.Net版本都没有,所以我添加了一些其他资源在这里: CR becomes \r // Javascript string cannot be broke into more than 1 line LF becomes \n // Javascript string cannot be broke into more than 1 line TAB becomes \t Control […]

C#将十进制序列化为xml

我有一个小数属性,就像 [XmlElementAttribute(DataType = “decimal”)] decimal Price 问题是我想强制它始终以2的精度序列化,但如果价格是10.50,它将被序列化为XML,如10.5 。 有什么方法可以强制它(没有创建新属性或更改此属性的获取?我正在寻找一些方法来执行此操作只将模式发送到XmlSerializer(或XmlElementAttribute)或任何聪明的方法来执行此操作? 谢谢

Azure Service Bus序列化类型

我们已经开始调查使用Windows Azure Service Bus作为我们当前队列的替代品,因为我们正朝着面向服务的架构迈进。 大多数文件都很清楚; 但是我很难确定BrokeredMessage在提供主体时使用哪种类型的序列化。 例如,假设我实例化一个BrokeredMessage对象,如下所示: ICommand sendMessageCommand = new SendMessageCommand { Title = “A new message title”, Body = “A new message body” }; BrokeredMessage brokeredMessage = new BrokeredMessage(sendMessageCommand); queueClient.Send(brokeredMessage); SendMessageCommand是一个标有[Serializable]属性的简单DTO; 在我们的旧队列中,这是二进制序列化的,因此它可以更快地存储并保留其元数据。 这对我们很重要,因为我们使用队列使用此处概述的模式发送命令,接收工作者角色使用generics和动态类型的混合反序列化命令。 但是根据这篇文章,传递给BrokeredMessage的构造函数的主体是“Binary XML Serialized”。 我的假设是,这是标准的XML序列化,然后通过二进制格式化器,是正确的吗? 除此之外; 这是否意味着如果我要使用默认的BrokeredMessage消息体function; 我必须确保所有对象都是XML Serializable,包括所有出现的问题? (私有字段丢失,没有使用generics反序列化的元数据,xml序列化属性) 最后; 如果是这样的话; 有一个简单的方法吗? 我正在考虑做我们自己的二进制序列化,然后将byte[]存储在BrokeredMessage的属性中。

序列化匿名委托列表

这个问题可能与我的问题非常相似,但我看不出我需要的答案。 我有一个名为CASM的类,它有一个List 。 我想序列化这个类(使用BinaryFormatter或类似的东西)。 此类和Action引用的所有类都具有正确的[Serializable]和[NonSerializable]属性。 尝试序列化时会出现问题 – 它会出现此错误: Type ‘CASM.CASM+c__DisplayClass2c’ in Assembly ‘CASM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ is not marked as serializable. 这个c__DisplayClass2c是一个自动生成的内部类,它包含我在我的应用程序中使用的不同类型的匿名委托。 但是,正如我们从下图中看到的那样,它不是[Serializable] : alt text http://bayimg.com/image/maebbaacj.jpg 更改我的应用程序的最佳方法是什么? 制作我自己的c__DisplayClass2c -type类并使其可序列化? 或者,还有更好的方法? 编辑:最后我创建了自己的类,而不是自动生成的类。 我也帮助调试,实际上有一个描述性的名称,而不仅仅是b__12() 。

无法反序列化当前的JSON对象,为什么?

我正在尝试使用WebApi从我的数据库中获取Employees列表,使用此代码:这是我的客户端MVC应用程序的代码: string u = “http://localhost:1411/api/EmployeeAPI”; Uri uri = new Uri(u); HttpClient httpClient = new HttpClient(); Task response = httpClient.GetAsync(uri); Task.WaitAll(response); HttpResponseMessage resposta = response.Result; var msg = resposta.Content.ReadAsStringAsync().Result; Employee[] employees = JsonConvert.DeserializeObject(msg); return View(employees); 这是我的WebAPI的代码: public IEnumerable GetEmployees() { return db.Employees.AsEnumerable(); } 但是这个错误不断出现,我无法理解为什么: 无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“DataAccess.Employee []”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径’消息’,第1行,第11位。 我的员工类: namespace DataAccess { using System; using […]

序列化和反序列化Visual Studio解决方案文件 – 或以编程方式编辑?

我想以编程方式添加和删除项目,解决方案文件夹和其他项目(如资源文件)到解决方案,但我不确定什么是最好的方法。 对于那些不了解的人,高度简化; 这是一个suution文件(.sln)通常的样子: Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”) = “project name”, “projectpath\name.csproj”, “{785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}” EndProject Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {785ECC80-AF1B-4FBC-B97B-2EC43B7E81E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU EndGlobalSection EndGlobal 我不确定这是否是一个真正的开放标准,如xml(它是?),但它看起来像是基础团队制作了自己的xml版本。 (不是恭维) 那么,无论如何,将这些对象序列化和反序列化的最佳方法是什么? 我正在考虑制作自己的IFormatter,但这看起来相当复杂。

MongoDb自定义集合序列化器

我有四个简单的课程 public class Zoo{ public ObjectId Id { get; set; } public List Animals { get; set; } } public class Animal{ public ObjectId Id { get; set; } public string Name { get; set; } } public class Tiger : Animal{ public double Height { get; set; } } public class Zebra : Animal{ […]