这段代码:
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
var client = new WebClient();
client.Headers.Add("User-Agent", "Nobody");
var response = client.DownloadString(new Uri("http://www.hanselman.com/smallestdotnet/json.ashx"));
var j = JsonConvert.DeserializeObject<SmallestDotNetThing>(response);
}
public class SmallestDotNetThing
{
public DotNetVersion latestVersion { get; set; }
public List<DotNetVersion> allVersions { get; set; }
public List<DotNetVersion> downloadableVersions { get; set; }
}
public class DotNetVersion
{
public int major { get; set; }
public int minor { get; set; }
public string profile { get; set; }
public int? servicePack { get; set; }
public string url { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在.NET 4下使用.NET 4版本的JSON.NET时,将在Deserialize上抛出异常"操作可能会破坏运行时的稳定性".
但是,将目标切换到3.5(并将JSON.NET引用更改为3.5版本)效果很好.我正在使用NuGet的JSON.NET.
思考?
.NET 4运行时中的安全模型似乎发生了变化(请参阅Karel Zikmunds答案和.NET安全博客条目),它依赖于AllowPartiallyTrustedCallersAttribute.
Karel还发布了一些解决方案:
你有这些选择:
- 如果您不需要APTCA,请将其删除.
- 从SDK运行SecAnnotate工具并修复所有违反透明度的行为 - http://blogs.msdn.com/b/shawnfa/archive/2009/11/18/using-secannotate-to-analyze-your-assemblies-for-transparency-violations -an-example.aspx.
- 使用Level1属性将程序集切换到v2安全模型 - http://blogs.msdn.com/b/shawnfa/archive/2009/11/11/transparency-models-a-tale-of-two-levels.aspx
关于Stackoverflow的另一篇文章,C#中的协方差和反演变量可能存在问题