反序列化与其中的成员具有相同对象的JSON对象

时间:2015-07-23 22:23:09

标签: c# json json-deserialization

我在对具有如下结构的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

enter image description here

我尝试使用以下语句,但仍然没有运气。

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);

对此有任何帮助将不胜感激。

2 个答案:

答案 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);
        }
    }

这是一个例子 -

enter image description here

答案 1 :(得分:0)

因为您的公共属性为<div class="footer"> <div class="left">my left content</div> <div class="right">my right content</div> </div>,所以deserializer无法在那里设置值。要解决此问题,您需要将IReadOnlyList属性应用于[JsonProperty]字段

_items