[英]Cannot convert object of type 'System.String' to type 'System.Collections.Generic.List`1
I am trying to deserializing json string to a complex object with no success: 我试图将json字符串反序列化为复杂对象,但没有成功:
This is the class I am trying to deserialize to: 这是我要反序列化的课程:
public class ExcludePublisherRule : BaseAutomaticRule
{
public int LineIdx { get; set; }
[Required]
[Range(30, 1000)]
public int MininumInstalls { get; set; }
[Required]
public int UsingDataFrom { get; set; }
[Required]
public List<PostEventModel> PostEventsModels { get; set; }
}
public abstract class BaseAutomaticRule
{
public int Id { get; set; }
[Required(ErrorMessage = "*Rule name is required")]
[StringLength(70)]
public string Name { get; set; }
public DateTime LastActivated { get; set; }
[Required]
public string CampaignId { get; set; }
public int StatusId { get; set; }
}
public class PostEventModel
{
public int Id { get; set; }
public int PublisherInstalls { get; set; }
}
This is how I try to do it:
//Get type and Object and returns a class object.
public T ConvertToAutomaticRule<T>(dynamic automaticRuleJSON)
{
var json = "";
try
{
var serializer = new JavaScriptSerializer();
json = serializer.Serialize(automaticRuleJSON);
return serializer.Deserialize<T>(json);
}
catch (Exception ex)
{
log.Error($"Ex message: {ex.Message}, json is {json}");
return default(T);
}
}
The json: json:
{"automaticRuleName":"asd","installsNumber":"30","usingDataFrom":"1","ruleStatusId":"1","automaticRuleID":"0","PostEventsModels":"[{\"Id\":\"23\",\"PublisherInstalls\":\"15\"},{\"Id\":\"2\",\"PublisherInstalls\":\"96\"}]","campaignId":"95e62b67-ba16-4f76-97e4-dd96f6e951c7"}
But I keep getting the error above, what's wrong with this way? 但是我总是遇到上述错误,这种方式有什么问题?
The JSON explicitly says it is a string, not an array; JSON明确表示它是一个字符串,而不是数组。
"PostEventsModels":"[{\"Id\":\"23\",...
should be: 应该:
"PostEventsModels":[{"Id":23,...
Fix the source JSON 修复源JSON
If you format your json (for example on https://jsonformatter.curiousconcept.com/ ) you can see that the property PostEventsModels
is not a json list, but a string representation of it. 如果格式化json(例如,在https://jsonformatter.curiousconcept.com/上 ),则可以看到属性
PostEventsModels
不是json列表,而是它的字符串表示形式。
{
"automaticRuleName":"asd",
"installsNumber":"30",
"usingDataFrom":"1",
"ruleStatusId":"1",
"automaticRuleID":"0",
"PostEventsModels":"[{\"Id\":\"23\",\"PublisherInstalls\":\"15\"},{\"Id\":\"2\",\"PublisherInstalls\":\"96\"}]",
"campaignId":"95e62b67-ba16-4f76-97e4-dd96f6e951c7"
}
So you need to correct the json generation, or let property PostEventsModels
be a string, and then deserialize this string later. 因此,您需要更正json的生成,或让属性
PostEventsModels
为字符串,然后稍后反序列化此字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.