【问题标题】:Problems to deserialize JSON data to IDbSet<T>将 JSON 数据反序列化为 IDbSet<T> 的问题
【发布时间】:2015-06-16 11:30:59
【问题描述】:

我有以下 json 数据:

{
    "Persons": [
        { "Person": { "FirstName":"A", "Surname": "B" } },
        { "Person": { "FirstName":"C", "Surname": "D" } },
        { "Person": { "FirstName":"E", "Surname": "F" } }
    ]
}

我的班级定义是:

public class PersonContext
{
    public IDbSet<Person> Persons { get; set; }
}

public class Person
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
}

当我使用 fastJSON 将其反序列化为对象时,我收到了 NullReferenceException

PersonContext context = fastJSON.JSON.ToObject<PersonContext>(jsonText);

调试fastJSON的source code,在CreateGenericList上抛出异常,因为调用(IList)Reflection.Instance.FastCreateInstance(pt);后方法的col变量为null。所以之后,当它尝试添加已解析的字典时,它会引发异常。

我可以配置序列化过程来确保IDbSet&lt;T&gt;对象被正确处理吗?

提前致谢。

PS:您也可以在github 中克隆我的 repo 以重现此问题。

【问题讨论】:

  • 您可以尝试将其反序列化为 Person 的 IEnumerable 吗?
  • @Glitch100 它也失败了......
  • 变成一个变量?不是 PersonContext 变量?如果是这样,那就奇怪了。
  • 我觉得我没听懂您的意思...抱歉...您的意思是var context = fastJSON.JSON.ToObject&lt;IEnumerable&lt;Person&gt;&gt;()?或者只是将IDbSet&lt;Person&gt; 替换为IEnumerable&lt;Person&gt;
  • 使用相同的 json 文件,当我执行 var context = fastJSON.JSON.ToObject&lt;IEnumerable&lt;Person&gt;&gt;(text); 时,它会抛出 ArgumentNullException(参数名称:key)。

标签: c# reflection fastjson


【解决方案1】:

这是先生对我问题的回答。 Mehdi Gholam(fastJSON 所有者)在此 thread

fastJSON 需要定义具体类型而不是接口,因此它知道要创建什么类型。

所以把你的代码改成:

public class PersonContext
{
   public List<Person> Persons { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多