Tag: 序列化

在json反序列化期间确定类型

我正在研究一种协议,其中接收器将接收某些指定自定义类型的json消息(当前为5,但可能为10-20)。 我正在努力想出一个最优/快速的解决方案,它将自动反序列化json并返回正确类型的对象。 例: public class MessageA { public string Message; } public class MessageB { public int value; } public class MessageC { public string ValueA; public string ValueB; } 理想情况下,该方法应该是这样的 Object Deserialize(string json); 并且它将返回三种消息类型之一或null – 如果存在解析错误/ json与任何预定义类型都不匹配。 更新:我可以控制发送器/接收器以及协议设计。

应用程序中的SQLite文件版本兼容性

我有一个C#.NET应用程序(一种复杂的计算应用程序),其中用户输入数据,处理后的信息使用JSON序列化和EF保存到SQLite文件中。 必要时可以将相同内容加载到我们的应用程序中。 应用程序在开发过程中经历了很多变化,并且类也被修改。 因此,以前在SQLite文件中保存的序列化对象与较新的序列化对象不同。 我想为旧文件提供兼容性,以便可以在新应用程序中打开它。 简单来说,使用JOL将带有bool作为成员的.NET类“类XYZ”序列化,并在SQLite文件中保存为BLOB。 稍后在较新版本的app中,“类XYZ”的bool成员被修改为int。 如何使用bool类型将以前保存的文件反序列化到新的应用程序中? 在整个版本中,SQLite表结构也有变化。 如何在.NET中实现这一目标?

如何使用protobuf-net嵌入类型信息以进行去序列化/序列化?

我希望能够以这样的方式序列化IMessage的具体实例,以便保留/嵌入类型信息(类似于例如Json.NET中可用的类型),以便在反序列化时可以使用类型信息来实现那些类型信息。具体实例。 我很清楚下面的de / / serialization方法不起作用。 如何更改它们以便它们起作用,我们将不胜感激。 public interface IMessage {} public interface IEvent : IMessage {} [ProtoContract] public class DogBarkedEvent : IEvent { [ProtoMember(0)] public string NameOfDog { get; set; } [ProtoMember(1)] public int Times { get; set; } } //Somewhere in a class far, far away public byte[] Serialize(IMessage message) { using(var stream = […]

使用Json.NET来(de)序列化DataContractJsonSerializer使用的结构中的字典?

有没有办法使用Json.NET进行(反)序列化,但继续使用DataContractJsonSerializer的字典序列化约定? 换句话说,有没有办法在这个结构中读写JSON: { “MyDict” : [ { “Key” : “One”, “Value” : 1 }, { “Key” : “Two”, “Value” : 2 } ] } 使用这样的类(使用Json.NET属性): public class MyClass { public Dictionary MyDict { get; set; } } 似乎Json.NET的KeyValuePairConverter可能会以某种方式提供帮助,但如果是这样,我找不到正确的方法来应用它。 我尝试使用[JsonProperty(ItemConverterType = typeof(KeyValuePairConverter))]归因MyDict , 这个页面甚至似乎暗示可以工作,但是在序列化期间添加这样的属性会导致ArgumentOutOfRangeException 。

DataContractJsonSerializer生成Ghost字符串到JSON键?

DataContractJsonSerializer这是在.net框架中添加的好类,可用于将对象序列化/期望化为JSON。 以下是我正在尝试的示例 [Serializable] class User { public string name; public string userId; } 现在以下是生成的输出 输出:通知结构,其中只需要“name”而不是k__BackingField 现在这是挖掘之后的问题,我不确定和_BackingField的来源? { “k__BackingField”:”test user”, “k__BackingField”:100001}

Xml序列化序列问题

通常,这一切都非常适合将我的对象序列化为Xml字符串并再次返回到对象中。 但是,我在不同的最终用户之间存在这种不一致,我似乎无法追查。 基本上,当我序列化一个对象时,它看起来像转换为Xml后: Step 2 20 Motor 450 KW Pump 1 400 Volt 3 Phase 12w 50Hz 400 415 Wye 3 231/400v F true 50 0.8000 false false F true KWm 0 0.90 450 false NEMA VariableFrequencyDrive F 0 5.3 Motor 450 KW Pump 1 400 Volt 3 Phase 12w 50Hz 400 415 Wye 3 […]

如何在C#中序列化对象并防止篡改?

我有一个C#类如下: public class TestObj { private int intval; private string stringval; private int[] intarray; private string[] stringarray; //… public properties not shown here } 我想将此类的实例序列化为字符串。 此外: 我将此字符串作为QueryString参数附加到URL。 所以我想尽一切努力确保字符串不会被轻易篡改。 另外,我希望序列化方法有效,因此字符串的大小是最小的。 我应该使用特定.NET Framework类/方法的任何建议吗?

如何在“设置”对象的反序列化时更新WPF UI

我的目标是这样做:用户选择设置文件,读取设置并相应地更新UI。 显然也应该可以节省。 我的程序目前不是WPF / XAML,现在这样做意味着需要大量重复并在需要新设置时添加工作。 所以有人告诉我WPF / XAML是要走的路,我调查并喜欢它,但我仍然不确定如何做我想要的。 WPF / XAML的优点当然是数据绑定,但如果我想读取整个设置文件,我可能会用新的设置替换旧的设置对象。 我可以让WPF程序对此做出反应并根据某些给定的数据绑定更新字段吗? 我最感兴趣的是这是好的设计,如果不是 – 那是什么。

Hashtables是否可序列化?

我在互联网上看到了一个普遍的信念 (2009年文章), Hashtable类不可序列化; 但是,我找不到任何支持这个概念的现代文档。 这种信念源于另一个不明确的信念,即IDictionary接口阻止序列化; 但是,我今天在MSDN中找不到任何支持此声明的内容。 此外, Hashtable实现了ISerializable并包含接受序列化信息的扩展方法。 那么,这笔交易是什么? Hashtable是否可序列化? 哪些文档支持围绕IDictionary概念? 进一步澄清 ( 请阅读 ): 大量文档支持IDictionary不可序列化的声明; 但是,这侧重于使用基于XML的序列化与类的交互。 如下面的注释和MSDN中所提到的ISerializable表示类是可序列化的。 它还意味着必须为自己的序列化负责的类。 我认为这否定了Hashtable不可序列化的说法。 这可能是我的问题的起源。

inheritance字典的Serialize类不是序列化属性

我有一个inheritance自Dictionary的类,并且有一些属性。 当我序列化它时,只序列化字典而不是属性。 如果我有一个包含属性的有效负载,它会对它们进行反序列化。 如何使其序列化我的对象,包括属性? public class Maintenance : Dictionary { public int PersonId { get; set; } } return JsonConvert.DeserializeObject(jsonString); //Populates PersonId and all other properties end up in the dictionary. return JsonConvert.SerializeObject(maintenance); //Only returns dictionary contents 我很欣赏有关如何使序列化使用与反序列化似乎使用相同的行为的建议。