我在对具有如下结构的json进行反序列化时遇到问题。
public class Entity
{
public int Id;
public string EntityName;
private List<Entity> _items;
//Sub entities
public IReadOnlyList<Entity> Items
{
get{
return _items;
}
}
}
在调试模式下, 我能够看到物品&gt; 0通过JSON Visualizer(如下图所示),但当我尝试反序列化时,我总是得到Items count = 0
我尝试使用以下语句,但仍然没有运气。
var json = await response.GetContentAsync<string>();
尝试1
var deserializedList = JsonConvert.DeserializeObject<IEnumerabld<Entity>>json);
尝试2
var settings = new JsonSerializerSettings{MaxDepth = 5};
var deserializedList = JsonConvert.DeserializeObject<IReadOnlyList<Entity>>(json, settings);
对此有任何帮助将不胜感激。
答案 0 :(得分:1)
第一个选项是IList<Entity>
,但如果想将其保留为IReadOnlyList<Entity>
,您可以通过为其提供设置器来实现这一目标 -
public IReadOnlyList<Entity> Items
{
get
{
return _items;
}
set
{
_items = _items ?? new List<Entity>();
if (value == null)
return;
_items.AddRange(value);
}
}
这是一个例子 -
答案 1 :(得分:0)
因为您的公共属性为<div class="footer">
<div class="left">my left content</div>
<div class="right">my right content</div>
</div>
,所以deserializer无法在那里设置值。要解决此问题,您需要将IReadOnlyList
属性应用于[JsonProperty]
字段
_items