使用JsonConvert.DeserializeObject将vson字符串反序列化为C#.net类(v 4.0.8.14612)

时间:2012-10-02 11:07:38

标签: c#-4.0 teamcity deserialization json.net

在我的网络应用程序中,我编写了一些测试来测试我的反序列化逻辑,它将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

有人提出任何线索吗?

0 个答案:

没有答案