我有这样的类层次结构:
class Rule { }
class Condition { List<Rule> Rules { get; set; } }
忘记剩下的属性。我需要使用自定义JsonConverter从JSON字符串反序列化。问题是,我有每个特定情况的代码,但我不能递归运行,为了处理Rules属性,它的每个元素也可以是一个条件。 我的代码看起来像这样(ReadJson方法):
var jo = JObject.Load(reader);
Rule rule = null;
if (jo["condition"] == null)
{
rule = new Rule();
//fill the properties for rule
}
else
{
rule = new Condition();
//I now want the converter to go through all the values in jo["rules"] and turn them into Rules or Conditions
}
实现这一目标的最佳方法是什么?如果发现对象是条件:
,我试图获取剩余部分的JSONvar json = jo.GetValue("rule").ToString();
但是我不能像这样反序列化,它会引发异常:
var rules = JsonConvert.DeserializeObject<Rule[]>(json, this);
例外是:JsonReaderException:从JsonReader读取JObject时出错。当前的JsonReader项不是对象:StartArray。路径&#39;&#39;,第1行,第1位。
有什么想法吗?
答案 0 :(得分:1)
你离它不远了。根据JSON中是否存在<script type="text/javascript">
$('.rating-votes').likeDislike({
reverseMode: true,
click: function (value, l, d, event) {
var likes = $(this.element).find('.likes');
var dislikes = $(this.element).find('.dislikes');
var comid = $(".vbtn").val();
var data = {comid:comid};
if(value === 1){
data.likes = true;
}else{
data.dislikes = true;
}
$.ajax({
url: '',
type: 'POST',
data: data,
success: function (data) {
likes.text(parseInt(likes.text()) + l);
dislikes.text(parseInt(dislikes.text()) + d);
}
});
}
});
</script>
<script src="like-dislike.js"></script>
属性实例化正确类型的对象后,可以使用condition
方法填充实例。这应该自动处理递归。您需要将新的serializer.Populate
实例传递给JsonReader
,您可以使用Populate
创建该实例。
以下是转换器的外观:
jo.CreateReader()
以下是一个工作示例:https://dotnetfiddle.net/SHctMo