在我的代码中,我使用Newtonsoft.Json:
MyCSharpTargetClass foo = JsonConvert.DeserializeObject<MyCSharpTargetClass>(json_string);
json_string的内容是常量(从永远不会更改的文件加载)。
功能很好,但反序列化过程执行缓慢。
我的问题:有没有办法预先计算对象,或者把它放在一个常数*,或者什么加速执行?
注意:实际上我没有设法将JsonConvert.DeserializeObject&lt; ...&gt;()的结果设为常量,但我是C#的新手,所以我应该错过一些东西。
感谢您的帮助
[EDIT]解决方案:强制在应用程序启动时加载Newtonsoft程序集。
答案 0 :(得分:1)
实际上并没有很多人认为你可以做到这一点来加快速度。
使用ignore属性,因此不会添加此字段。将此用于某些属性或可计算属性/字段,以后可以重新计算。 希望这个链接有所帮助:
https://msdn.microsoft.com/en-us/library/system.runtime.serialization.ignoredatamemberattribute.aspx
使用线程读取/写入对象,如果可以将数据自定义为多个文件并在线程中序列化/反序列化。
DataMember
名称
[DataMember(Name = "id")]
public int MyObjectForSomethink{get;set;}
答案 1 :(得分:1)
您可以像对待任何其他对象一样:将其设为private
成员变量,其值只计算一次:
private static readonly MyCSharpTargetClass foo = JsonConvert.DeserializeObject<MyCSharpTargetClass>(json_string);
或者在构造函数中执行:
private readonly MyCSharpTargetClass foo;
public MyObject()
{
foo = JsonConvert.DeserializeObject<MyCSharpTargetClass>(json_string);
}
这样就可以完成一次反序列化字符串的工作。