Tag: 序列化

使Visual Studio设计器忽略公共属性

我有一个带有公共属性的UserControl,使用以下属性: [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 我尝试删除所有者表单,在Visual Studio 2010中重新创建一个新表单,并将此UserControl添加到表单。 它不断在Designer文件中添加如下行: this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject(“vMyUserControl.MyProperty”))); 这会导致我的应用程序崩溃,因为此属性不是由序列化创建的。

C#BinaryFormatter – 使用另一个命名空间中的对象反序列化

最近,我们将部分代码移到了不同​​的项目库中。 不幸的是,似乎这些数据已经用BinaryFormatter序列化到数据库中(不要问我为什么,我不知道,我讨厌这个想法)。 现在我负责创建一个更新数据库的更新工具(当我们的软件根据版本检测到需要更新的数据库时,该工具会自动启动): 创建新列 反序列化二进制列 将反序列化的列写入新列 删除旧的二进制列 我的问题是,当我尝试反序列化时,它告诉我: Unable to find assembly ‘MyOldAssemblyName, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a5b9cb7043cc16da’. 但是这个组件不再存在了。 我把这个类放在我的“更新程序”项目中没有问题,但我无法保持这个旧项目只包含这个文件。 有没有办法指定BinaryFormatter它必须反序列化它用指定类接收的Stream? 或者说组件已重命名,或???

序列化多个对象

我的序列化代码是这样的.. public class slab { public int lowerlimit {get; set;} public int upperlimit { get; set; } public int percentage { get; set; } } public class Details { static void Main(string[] args) { slab s= new slab(); s.lowerlimit = 0; s.upperlimit = 200000; s.percentage = 0; XmlSerializer serializer = new XmlSerializer(s.GetType()); StreamWriter writer = […]

在.NET中序列化,在C ++中反序列化

我有一个.NET应用程序,它以二进制格式序列化对象。 这个对象是一个由几个字段组成的结构。 我必须在C ++应用程序中反序列化并使用此对象。 我不知道是否有任何C ++序列化库,谷歌搜索没有太多。 实现这一目标的最快方法是什么? 提前致谢。 Roey。 更新:我已经在我的.NET应用程序中使用Protobuf-net进行了序列化,相对容易。 我还使用GetProto()命令获取protobuf-net生成的.proto文件。 在.proto文件中,我的GUID字段得到一种类型“bcl.guid”,但C ++ protoc.exe编译器不知道如何解释它们! 我该怎么办?

反序列化不适用于MemoryStream

//Serialize the Object MemoryStream ms = new MemoryStream(); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms , ObjectToSerialize); byte[] arrbyte = new byte[ms .Length]; ms.Read(arrbyte , 0, (int)ms .Length); ms.Close(); //Deserialize the Object Stream s = new MemoryStream(arrbyte); s.Position = 0; Object obj = formatter.Deserialize(s);//Throws an Exception s.Close(); 如果我尝试使用上面的方式反序列化,它会将exception作为 ‘二进制流’0’不包含有效的BinaryHeader。 可能的原因是序列化和反序列化之间的无效流或对象版本更改。 以下代码在哪里工作 //Serialize the Object IFormatter formatter […]

Json.NET – 阻止重新序列化已经序列化的属性

在ASP.NET Web API应用程序中,我正在使用的一些模型包含一大块ad-hoc JSON,仅在客户端有用。 在服务器上,它只是作为字符串进出关系数据库。 性能是关键,根本不需要处理JSON字符串服务器端。 所以在C#中,想象一个像这样的对象: new Person { FirstName = “John”, LastName = “Smith”, Json = “{ \”Age\”: 30 }” }; 默认情况下,Json.NET会像这样序列化这个对象: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: “{ \”Age\”: 30 }” } 我希望能够指示Json.NET假设Json属性已经是序列化表示,因此它不应该重新序列化,并且生成的JSON应该如下所示: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: { “Age”: 30 } } 理想情况下,这适用于两个方向,即在POST JSON表示时,它将自动反序列化为上面的C#表示。 使用Json.NET实现这一目标的最佳机制是什么? 我需要自定义JsonConverter吗? 是否有一个更简单的基于属性的机制? 效率很重要; 重点是跳过序列化开销,这可能是一个微优化,但为了论证,让我们假设它不是。 (可能会返回包含大量Json属性的大列表。)

BinaryFormatter是否对线程安全进行序列化和反序列化?

引用这个问题的答案。 可以改写为: private static BinaryFormatter formatter = new BinaryFormatter(); public static T DeepClone(this T a) { using(MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, a); stream.Position = 0; return (T)formatter.Deserialize(stream); } } 那么为每次调用避免构造(和GC)一个新的BinaryFormatter? 这个代码路径非常频繁,因为它涉及我们的缓存层,我想尽可能轻量级。 谢谢。

从接口强制执行可序列化而不强制类在C#中自定义序列化

我有一个接口,定义了一些我希望某些类实现的方法。 公共接口IMyInterface { 治法; 方法b; } 另外,我希望实现此接口的所有类都可以序列化。 如果我更改接口定义以实现ISerializable如下…: 公共接口IMyInterface:ISerializable { 治法; 方法b; } …据我所知,所有类现在必须显式实现序列化,因为如果实现ISerializable,则必须实现GetObjectData成员(以及反序列化所需的构造函数)。 如何坚持使用我的界面的类是可序列化的,但不强制他们自定义实现序列化? 谢谢,威尔

如何在NHibernate中克隆对象?

如何在NHibernate中实现克隆的对象(实体)? 每个实体类都有这样的属性: public virtual IList Clubs { get; set; } 此外,实体类inheritanceBaseObject。 我尝试使用XML序列化来实现解决方案,但是不可能序列化接口。 谢谢您的回答!

JSonNet布尔序列化

快速提问: 在JSONNet中 – 如何将bool true / false序列化为bool 1/0 我可以看到我们如何处理空值,所有这些似乎无法找到如何做到这一点。 这可能吗?