Tag: serialization

是否可以使用协议缓冲区序列化System.Object对象列表

我有各种数据类型的对象列表(DateTime,int,decimal,string)。 List myObjects = new List(); myObjects.Add(3); myObjects.Add(3.9m); myObjects.Add(DateTime.Now); myObjects.Add(“HELLO”); 我能够使用protobuf-net序列化此列表,但反序列化总是抛出exception:“附加信息:不期望类型,也不能推断出合同:System.Object”。 using (var ms = new MemoryStream()) { Serializer.Serialize(ms, list2); var bytes = ms.ToArray(); ms.Position = 0; var clone = Serializer.Deserialize(typeof(List), ms); //Throws exception } 我没有任何明确的合同,我想这是问题所在? 但是,我确实知道序列化对象的预期类型是什么,但我如何告诉protobuf-net?

序列化和发送协议缓冲消息

我在c#中写了这个protobuf消息 C#客户端: public AddressBook InitializeAdressBook() { Person newContact = new Person(); AddressBook addressBookBuilder = new AddressBook(); Person john = new Person(); john.id=1234; john.name=”John Doe”; john.email=”jdoe@example.com”; Person.PhoneNumber nr = new Person.PhoneNumber(); nr.number=”5554321″; john.phone.Add(nr); addressBookBuilder.person.Add(john); TextBox.Text += (“Client: Initialisiert? ” + addressBookBuilder.ToString()) + “\t” + “\n”; TextBox.Text += ” Erster Person ” + addressBookBuilder.person.First().name + “\t” + […]

XNA的自动XNB序列化支持哪些类型?

我已经阅读了Shawn Harvgreave关于自动序列化的博客文章和关于内容管道概述的MSDN文章,但我找不到支持的类型列表。 引用MSDN: 从XNA Game Studio 3.1开始,对于没有现有内容类型编写器的简单类型,自动完成自定义数据到.XNB格式的序列化。 我没有遇到过这个问题,直到我尝试使用System.Collections.Generic中的Queue ,我猜测它不受自动序列化的支持。 那么,是否有一个支持的类型列表? 如果不支持,我是否需要编写自己的ContentTypeWriter和ContentTypeReader ?

MemoryStream的byte 缓冲区可以变化吗?

我正在使用MemoryStream将对象序列化为byte[] : byte[] serialized = new byte[1000]; using (MemoryStream stream = new MemoryStream(serialized)) using (TextWriter textWriter = new StreamWriter(stream)) serializer.Serialize(textWriter, stuffToSerialize); 有没有什么方法可以根据stuffToSerialize的大小设置’serialized’来增长?

一个列表中多个对象类型的XmlSerialization

我有一个对象有一个抽象的’aninamls’列表。 即 var animals = new Animals { new Bird{ TailFeatherColour = “Blue” }, new Cat{ Colour = “Brown” } }; 使用xmlserializer,是否可以将上面的序列化为以下xml, Blue Brown 目前,我只能得到以下内容: Blue Brown

如何在Protobuf-Net中保留一个可以为空的值的数组?

我正在从BinaryFormatter迁移到Protobuf-net(到目前为止,它似乎在存储大小和反序列化时间方面提供了巨大的改进)。 然而,我遇到的一个问题是double?[]数组不会以序列化的相同forms反序列化。 数组中任何null的值都会被全部删除 – 即如果我从一个包含6个元素[null,null,1,2,3,null]的数组开始,在反序列化后我最终得到一个数组[1 ,2,3]。 对于我的程序,我必须以与序列化之前完全相同的forms检索这些数组 – 如果使用BinaryFormatter则会发生这种情况。 到目前为止我提出的一个解决方案是为每一个创建两个数组,一个是double [],其中每个元素都有一个值,另一个是bool [],它可以用来描述原始值是否为null – 但是由于各种原因,这是非常低效的。 我可以在之前的相关问题中看到,ProtoMember可能有一个’SupportNull’选项,但是我找不到任何文档清楚地显示如何实现它,并且无法通过游戏来解决这个问题。 任何人都可以提供的帮助将非常感激。

如何配置protobuf-net的RuntimeModel.Default以支持序列化/反序列化SessionSecurityToken?

BinaryFormatter能够简单地处理序列化: private byte[] TokenToBytes(SessionSecurityToken token) { if (token == null) { return null; } using (var memoryStream = new MemoryStream()) { var binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(memoryStream, token); return memoryStream.ToArray(); } } 当我尝试用protobuf-net替换BinaryFormatter时: using (var memoryStream = new MemoryStream()) { Serializer.Serialize(memoryStream, token); return memoryStream.ToArray(); } 我得到以下exception: 不期望类型,也不能推断出合同:System.IdentityModel.Tokens.SessionSecurityToken 我尝试添加: RuntimeTypeModel.Default.Add(typeof(SessionSecurityToken), true); 哪个超过exception,但我现在得到一个零字节数组。 如何正确配置protobuf-net以序列化SessionSecurityToken? 另一方面,SessionSecurityToken没有无参数构造函数。 using (var […]

序列化对象消失(BinaryFormatter)

背景 我有一个对象需要序列化才能转移到高性能计算集群供以后使用 以前,我已经为我的对象使用了开箱即用的二进制格式化程序,它代表了一个统计形状模型,并且都很愉快地工作 我的对象变得更加复杂,我决定通过实现ISerializable来自定义序列化过程。 我继续支持以先前格式存储的数据 问题 我的问题是,一个特定值似乎成功序列化,但在尝试反序列化时始终具有null值。 (没有错误,只是一个非常不愉快,无用的空值) 当我在序列化时断开时,我可以通过检查SerializationInfo并且它有值(它没什么特别的,但是会在下面发布它的代码)看到该对象被添加到SerializationInfo中。 正在调用序列化构造函数(我也在那里设置了一个断点),但是当我检查构造函数的SerializationInfo对象时,它没有数据(它有一个条目,只有没有数据) 更新 – 在这里下载控制台应用程序。 谢谢你的期待 或者,看看这里的代码: 代码 导致问题的类:( PointProfiles属性是违规对象) [Serializable] public class TrainingSet : ITrainingSet, ISerializable { public Dictionary<Tuple, IPointTrainingSet> PointProfiles { get; set; } public PrincipalComponentAnalysis PointPCA { get; set; } public double[] AlignedMean { get; set; } public List<Tuple> Transforms { get; set; } […]

如何将Observable序列化到云端并返回

我需要将处理序列(如本问题中如何使用.net RX组织数据处理器序列 )拆分为Azure环境中的多个计算单元。 我们的想法是将Observable序列序列化为Azure队列(或Service Bus)并将其反序列化。 如果生产者或消费者失败,其他方应该能够继续生产/消费。 任何人都可以建议一个优雅的方式来做这个和使用什么(Azure队列或服务总线)? 有没有人使用TCP Observable提供程序 – http://rxx.codeplex.com/wikipage?title=TCP%20Qbservable%20Provider这样的问题是否对一方的失败安全?

尽管元素值包含混合内容,但将元素值反序列化为字符串

假设这样的XML: content content 还有一个类: [Serializable] [XmlType(AnonymousType = true, Namespace = “http://foo/bar”)] [XmlRoot(ElementName = “Root”, Namespace = “http://foo/bar”, IsNullable = false)] public class MyRoot { public string FieldBasic { get; set; } public string FieldComplex { get; set; } } 如何将反序列化为中的字符串? 它在内部找到HTML时失败。 我想让它给我一个包含这个内容的字符串: content 如果我将FieldComplex声明为public object FieldComplex (即xsd:anyType ),它有点工作,我得到一个XMLNode[] ,我可以使用它。 但我需要FieldComplex为序列化的类型字符串,因为序列化XML不包含HTML,它将如下: content content 将FieldComplex声明为对象将在元素上插入这些属性: xmlns:q1=”http://www.w3.org/2001/XMLSchema” p3:type=”q1:string” […]