Json.NET和Obfuscation,反序列化不起作用

我想分享我的团队和我发现的解决方案,以解决当您尝试将Json.Net和Obfuscation联系起来时出现的问题。

我的配置:VS2013,C#,.NET 4.0,Json.Net 7.0.1,CodeWall / Crypto Obfuscator。

一切正常,直到我混淆了我的代码。 之后,我无法反序列化我的json文件(已正确序列化!)。

我们的解决方案提供了DefaultSerializationBinder类的“一种黑客攻击”,您只需从源代码中选择并随意修改(或提供抽象类SerializationBinder的自定义覆盖)。 当它试图从程序集名称中发现正确的程序集时,似乎出现了这个问题…这里混淆将与这两个不匹配。

这里是您需要重写的方法的代码:

private static Type GetTypeFromTypeNameKey(TypeNameKey typeNameKey) { string assemblyName = typeNameKey.AssemblyName; string typeName = typeNameKey.TypeName; if (assemblyName != null) { // look, I don't like using obsolete methods as much as you do but this is the only way // Assembly.Load won't check the GAC for a partial name Assembly assembly = Assembly.LoadWithPartialName(assemblyName); if (assembly == null) { string partialName = assemblyName; var elements = assemblyName.Split(','); if (elements.Length > 0) { partialName = elements[0]; } // will find assemblies loaded with Assembly.LoadFile outside of the main directory Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly a in loadedAssemblies) { if (a.GetName().Name == assemblyName || a.FullName == assemblyName || a.GetName().Name == partialName) { assembly = a; break; } } } if (assembly == null) { throw new JsonSerializationException(string.Format("Could not load assembly '{0}'.", assemblyName)); } Type type = assembly.GetType(typeName); if (type == null) { throw new JsonSerializationException(string.Format("Could not find type '{0}' in assembly '{1}'.", typeName, assembly.FullName)); } return type; } else if (typeName != null) { return Type.GetType(typeName); } else { return null; } } 

我希望这可以帮助你!

请随意分享您的想法,欢迎其他测试!