我有序列化的JSON字符串serializedClaims -
// The Claim here is System.Security.Claims.Claim
var claims = new List<Claim>();
claims.Add(new Claim("MakerId", "939393", ClaimValueTypes.String));
claims.Add(new Claim(ClaimTypes.DateOfBirth, "1956-03-08", ClaimValueTypes.Date));
var serializedClaims = JsonConvert.SerializeObject(claims);
现在我想将serializedClaims
反序列化回List。
但是当我这样做时
var list = JsonConvert.DeserializeObject<List<Claim>>(serializedClaims);
我收到错误“无法找到构造函数....”
如何正确反序列化?
编辑:一直以List<Claim>()
开头。我得到的错误尽管如此。如何为此分配空构造函数?
答案 0 :(得分:1)
var claims = new List();
与通用List<Claim>
尝试将var claims
更改为var claims = new List<Claim>()
<强>更新强>
尝试使用JsonCreationConverter
:http://www.newtonsoft.com/json/help/html/CustomCreationConverter.htm
class ClaimsConverter : JsonCreationConverter<Claim>
{
protected override Claim Create(Type objectType, Newtonsoft.Json.Linq.JObject jObject)
{
var type = jObject.Value<string>("Type");
var value = jObject.Value<string>("Value");
....
return new Claim(type, value);
}
}
答案 1 :(得分:1)
反序列化使用反射及其基本用法。
首先,你应该通过改变:
来使用泛型的力量var claims = new List();
。通过强>
var claims = new List<Claim>();
然后,为了使其正常工作,您应该对Claim
类进行一些调整。
答案 2 :(得分:1)
在下面的代码块中,您尝试创建一个名为&#39; claim&#39;使用var claims = new List()
。
但是你还没有告诉它它是什么列表。
您必须明确定义它是否为string
,int
,apples
,pears
或Claim
相反: var claims = new List<Claim>();
因此,您的最终代码块应如下所示:
claims.Add(new Claim("MakerId", "939393", ClaimValueTypes.String));
claims.Add(new Claim(ClaimTypes.DateOfBirth, "1956-03-08", ClaimValueTypes.Date));
var serializedClaims = JsonConvert.SerializeObject(claims);