Tag: serialization

.NET可移植类库属性

我有一个公共类库,包含我的服务器和客户端的许多模型。 由于客户端在Xamarin下运行,因此公共库必须是可移植类库(PCL)。 在我的服务器中,这些对象是通过AppDomain Remoting / Marshaling传递的,所以根据我的理解,对象需要标记为[Serializable]或从MarshalByRefObjectinheritance 在PCL中,我不能对我的任何模型做任何这些事情。 我的问题是:如何使这些对象与AppDomain Remoting / Marshaling一起使用并让它们驻留在可移植类库中?

为什么我们不需要在C#中声明serialVersionUID(或等效的)?

在Java中,强烈建议所有可序列化类显式声明serialVersionUID,因为默认的serialVersionUID计算对类详细信息高度敏感,并且编译器实现不可靠。 C#中的序列化有什么特别之处?

如何在c#中序列化哈希表

我已经实现了会话状态模式sqlserver,当我运行我的应用程序时,我面临着哈希表的XML序列化错误。 我的class级看起来像: [Serializable] public class ProjectSetup{ private System.Collections.Hashtable _ConfigTable; //and other properties here public System.Collections.Hashtable ConfigTable { get { return _ConfigTable; } } } 现在我想知道如何序列化hastable,或者如果有其他选择请告诉我。 并且确切的错误是:“无法序列化System.Collections.Hashtable类型的成员ProjectSetup.ConfigTable,因为它实现了IDictionary”

如何提高反序列化速度?

使用BinaryFormatter进行序列化/反序列化,生成的序列化文件大小约为80MB。 反序列化需要几分钟。 我怎么能改进这个? 这是反序列化代码: public static Universe DeserializeFromFile(string filepath) { Universe universe = null; FileStream fs = new FileStream(filepath, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); try { universe = (Universe)bf.Deserialize(fs); } catch (SerializationException e) { Console.WriteLine(“Failed to deserialize. Reason: ” + e.Message); throw; } finally { fs.Close(); } return universe; } 也许在反序列化之前读取所有内存或使用其他一些序列化技术?

检查类型是否为blittable的最快方法?

在我的serialiser / deserialiser中,我有以下代码段: if (element_type.IsValueType && collection_type.IsArray) { try { GCHandle h = GCHandle.Alloc(array_object, GCHandleType.Pinned); int arrayDataSize = Marshal.SizeOf(element_type) * c.Count; var array_data = new byte[arrayDataSize]; Marshal.Copy(h.AddrOfPinnedObject(), array_data, 0, arrayDataSize); h.Free(); WriteByteArray(array_data); return; } catch (ArgumentException) { //if the value type is not blittable, then we need to serialise each array item one at a […]

序列化/反序列化动态对象

我有以下课程: public abstract class Animal { public Animal() { _myType = getAnimal(this.GetType().Name); } private dynamic _myType; public dynamic myType { get { return _myType; } } } public class Cat : Animal { public Cat() : base() { } } 它的辅助function: public static T CreateAnimal(string animal) { Type type = Type.GetType(typeof(Form1).FullName + “+” + animal); […]

如何对JSON进行数据表的序列化和反序列化

我试图找到一种方法来序列化和反序列化数据集与一个数据表到JSON和从JSON回到数据集/数据表使用JSON.NET,但我找到的所有示例和示例只是从数据集或数据表序列化到JSON,从来没有两种方式。 我们有一个处理XML序列化数据集和数据表的系统,我们仍然需要以该格式保留这些数据集和数据表,但允许某些UI视图将数据呈现为JSON。 数据可以具有空值,这是有效的。 任何帮助将非常感激。 示例(单向序列化): http://www.west-wind.com/weblog/posts/2008/Sep/03/DataTable-JSON-Serialization-in-JSONNET-and-JavaScriptSerializer

在MVVM中进行序列化有很多麻烦

我正在WPF中开发一个基于文本的游戏,我正在探索MVVM。 目前我的项目中有2个模型,Adventurer和GameDate(我不关心这个应该或不应该是什么模型。我稍后会解决这个问题)。 我有一个viewmodel MainViewModel和一个视图MainView 。 MainView有按钮绑定保存/加载命令……而这就是我被卡住的地方。 我非常想实现一种二进制序列化的forms; 我有一个function类ObjectSerializer ,其中相应的部分在MainViewModel的Save和Load命令中,但我不知道如何’获取’访问需要序列化的类的实例(在这种情况下)因为我从来没有手动实例化它们中的任何一个。 此外,我想找到一种方法将它们全部序列化在一个文件中(游戏的典型“保存”文件)。 任何在MVVM中处理过序列化的人都应该引导我完成这个过程吗? 我一直坚持这一天,但没有取得任何进展,这让我发疯。 如果有人可以提供某种例子,我将永远负债。 先感谢您; 一个能让我超越这个驼峰的答案不会受到重视。 我真的在这里尝试…… ObjectSerializer.cs protected IFormatter iformatter; public ObjectSerializer() { this.iformatter = new BinaryFormatter(); } public T GetSerializedObject(string filename) { if (File.Exists(filename)) { Stream inStream = new FileStream( filename, FileMode.Open, FileAccess.Read, FileShare.Read); T obj = (T)this.iformatter.Deserialize(inStream); inStream.Close(); return obj; } return default(T); […]

传递运行时类型时无法解决符号exception

我有一个JSON反序列化器(如下所示),当我用一种已知的类型调用它时它工作得非常好。 public static T Deserialize(this object obj) { var javaScriptSerializer = new JavaScriptSerializer(); return (obj != null) ? javaScriptSerializer.Deserialize(obj.ToString()) : default(T); } 所以这个电话会起作用: var newExampleTypeX = exampleJsonString.Deserialize(); 但是,我要做的是传入一个在运行时设置的类型,并使用它代替“ExampleTypeX”。 当我这样做时,我得到以下编译错误: Cannot resolve symbol ‘someType’ 所以someType的声明看起来像这样(这是一个简化版本): var someType = typeof(ExampleTypeX); var newExampleTypeX = message.Deserialize(); 我应该以某种方式改变我的Deserialize扩展方法,还是改变我传递运行时类型的方式? 如果是,那我该如何实现呢?

序列化动态类型参数Protobuf-net

可能没有答案的重复: 这里和这里 。 我正在尝试使用protobuf-net(2.0.0.668)序列化带有params对象数组的类。 我的params对象[]中可以有不同的类型。 使用DataContractSerializer时,只需使用[KnownType]即可。 据我所知,protobuf-net并非如此,我必须使用[ProtoInclude] ,以及DynamicType = true ,如下所示: [ProtoContract, ProtoInclude(20, typeof(Int32))] //Int32 as an example public class MyParams { public MyParams(){} public MyParams( string name, params object[] parms) { this.Name = name; this.Parms = parms; } [ProtoMember(1)] public string Name { get; set; } [ProtoMember(2, DynamicType = true)] public object[] Parms { […]