在我的 Web 应用程序中,我编写了一些测试来测试我的反序列化逻辑,该逻辑将 json 字符串解析到我的 C# 类中。这些测试在我的计算机上运行良好,但在我们的 CI 环境中失败并显示以下错误消息:
Test(s) failed. System.TypeInitializationException : The type initializer for 'Newtonsoft.Json.JsonConvert' threw an exception. ----> System.Security.VerificationException : Operation could destabilize the runtime.
一个 json 字符串示例是这样的(来自测试类):
private const string MatrikkelJson = "{'Gaardsnummer':'9','Bruksnummer':'9','Festenummer':'8','Seksjonsnummer':'8','BlankAllowed':'False','AttrType':'Matrikkel'}";
此字符串应反序列化为此类:
public class MatrikkelDTO : AttributeBaseDTO
{
public string Gaardsnummer { get; set; }
public string Bruksnummer { get; set; }
public string Festenummer { get; set; }
public string Seksjonsnummer { get; set; }
}
public class AttributeBaseDTO
{
public bool BlankAllowed { get; set; }
public string AttrType { get; set; }
}
反序列化 json 字符串的方法是这样工作的:我首先反序列化 baseobject 以获取 AttrType 属性。使用该信息,我将 json 字符串反序列化为特定类型(我有几个继承自 AttributBaseDTO 的类。
public AttributeValidationHandlerResponse ValidateAttribute(string serializedObject)
{
var response = new AttributeValidationHandlerResponse();
response.Result = false;
//hack... this handler gets called when opening newdocument.aspx. don't know why.
if (serializedObject.Contains("function"))
{
response.Message = "";
return response;
}
if (String.IsNullOrEmpty(serializedObject))
{
response.Message = "attributeobject";
return response;
}
var message = "";
var attributeBase = JsonConvert.DeserializeObject<AttributeBaseDTO>(serializedObject);
if (attributeBase.AttrType == "Matrikkel")
{
var attribute = ConvertJsonStringToAttribute<MatrikkelDTO>(serializedObject);
response = ValidateMatrikkel(attribute);
}
return response;
}
internal T ConvertJsonStringToAttribute<T>(string serializedObject)
{
return JsonConvert.DeserializeObject<T>(serializedObject);
}
但我无法弄清楚为什么它在我的机器上而不是在构建服务器上工作。我正在使用 VS 2010、asp.net 4.0、net framework 4.0。测试框架是 nunit 2.5.5
任何线索任何人?