2

在我的 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

任何线索任何人?

4

0 回答 0