相关疑难解决方法(0)

Json.NET是否缓存类型的序列化信息?

在.NET世界中,当谈到对象序列化时,它通常用于在运行时检查对象的字段和属性.对此作业使用反射通常很慢,并且在处理大量对象时是不合需要的.另一种方法是使用IL发射或构建表达树,这些表现树相对于反射提供显着的性能增益.而后者是处理序列化时最现代化的库.但是,在运行时构建和发送IL需要花费时间,并且只有在将此信息缓存并重用于相同类型的对象时才会回收投资.

当使用Json.NET时,我不清楚使用上述哪种方法,如果确实使用了后者,是否使用了缓存.

例如,当我这样做时:

JsonConvert.SerializeObject(new Foo { value = 1 });
Run Code Online (Sandbox Code Playgroud)

Json.NET是否构建了Foo的成员访问信息并缓存以便以后重用它?

c# serialization json expression-trees json.net

24
推荐指数
1
解决办法
4832
查看次数

用C#中的枚举值反序列化Dictionary <string,object>

我正在尝试序列化/反序列化Dictionary<string, object>C#。对象可以是任何可序列化的对象。

Json.NET几乎可以工作,但是如果字典中的值是an enum,则反序列化是不正确的,因为它反序列化为a longTypeNameHandling.All没有任何区别。

序列化库是否有其他快速解决方案。结果不必是JSON,而必须是文本。

我对传递到字典的数据也没有影响。我只需要对遇到的任何问题进行序列化和反序列化。

编辑:StringEnumConverter没有帮助。数据被转换回Dictionary<string, object>,因此解串器不知道序列化的值是enum。它像对待对象一样对待它,反序列化后StringEnumConverter它仍然是一个对象string。如果long没有转换器,它将反序列化。JSON.NET不会保留枚举。

我要提供的解决方案是现有接口的实现,该接口被注入到我无法更改的现有解决方案中。

EDIT2:这是我正在尝试做的一个例子

public enum Foo { A, B, C }
public enum Bar { A, B, C }
public class Misc { public Foo Foo { get; set; } }


var dict = new Dictionary<string, object>();
dict.Add("a", Foo.A);
dict.Add("b", Bar.B);
dict.Add("c", new Misc());

// serialize dict to a string s
// deserialize s …
Run Code Online (Sandbox Code Playgroud)

c# enums serialization

5
推荐指数
1
解决办法
1277
查看次数

NewtonSoft SerializeObject 忽略 TypeNameHandling

按照官方文档

string jsonTypeNameAll = JsonConvert.SerializeObject(stockholder, Formatting.Indented, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
});

Console.WriteLine(jsonTypeNameAll);
// {
//   "$type": "Newtonsoft.Json.Samples.Stockholder, Newtonsoft.Json.Tests",
//   "FullName": "Steve Stockholder",
//   "Businesses": {
//     "$type": "System.Collections.Generic.List`1[[Newtonsoft.Json.Samples.Business, Newtonsoft.Json.Tests]], mscorlib",
//     "$values": [
//       {
//         "$type": "Newtonsoft.Json.Samples.Hotel, Newtonsoft.Json.Tests",
//         "Stars": 4,
//         "Name": "Hudson Hotel"
//       }
//     ]
//   }
// }
Run Code Online (Sandbox Code Playgroud)

我已经复制粘贴了这段代码。

    public static string Convert<T>(T cacheObject)
    {
        return JsonConvert.SerializeObject(cacheObject, Formatting.Indented, new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.All
        });
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我用 调用它Convert(DateTime.Now),我会得到一个序列化的 …

c# json.net

1
推荐指数
1
解决办法
1793
查看次数

标签 统计

c# ×3

json.net ×2

serialization ×2

enums ×1

expression-trees ×1

json ×1