具有继承功能的反序列化Newtonsoft JSON.NET无法正常工作

马里奥·托菲亚(Mario Toffia)

(使用Newtonsoft JSON.NET)

嗨,我在反序列化事件列表时遇到了一个问题,其中Event是基本类型,例如ResourceEvent是子类。如果我只是进行序列化然后反序列化,一切正常,并且列表包含ResourceEvents-但是,我将使用EF7的事件存储在postgres中的jsonb列中。

当我从postgres获取JSON有效负载时,它已经对属性进行了重新排序(但JSON合法)。当我尝试使用Newtonsoft JSON.net进行反序列化时,它只给我列出了基本类型为Event而不是子类ResourceEvent的列表。

我添加了两个高度剥离的示例,区别在于“ Type”属性在不同位置。在类中还对其他属性的顺序进行了排序。我根本没有在类上的注释。

此有效载荷成功地反硝化:

json
{
    "$type": "System.Collections.Generic.List`1[[Event, Tests]], mscorlib",
    "$values": [
        {
            "$type": "ResourceConfigurationEvent, Tests",
            /* Properties */
            "Resources": {
                /* Properties */                
            },
            "Type": 1            
        }
    ]
}

此有效负载未能成功反序列化:

json
{
    "$type": "System.Collections.Generic.List`1[[Event, Tests]], mscorlib",
    "$values": [
        {
            "Type": 1,            
            "$type": "ResourceConfigurationEvent, Tests",
            /* Properties */
            "Resources": {
                /* Properties */                
            },
        }
    ]
}
布莱恩·罗杰斯(Brian Rogers)

Json.Net通常期望将$type元数据作为每个对象的第一个属性,以实现反序列化的最佳效率。如果$type没有首先出现,则Json.Net假定它不存在。这就是为什么在对属性重新排序时会得到不同的结果的原因。

幸运的是,Json.Net提供了一个MetadataPropertyHandling设置来允许它应对这种情况。如果设置MetadataPropertyHandlingReadAhead它应该可以解决您的问题。请注意,这将对性能产生影响。

这是文档中代码示例

string json = @"{
  'Name': 'James',
  'Password': 'Password1',
  '$type': 'MyNamespace.User, MyAssembly'
}";

object o = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All,
    // $type no longer needs to be first
    MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
});

User u = (User)o;

Console.WriteLine(u.Name);
// James

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON .Net序列化无法正常工作

来自分类Dev

Newtonsoft JSON.NET反序列化错误

来自分类Dev

Newtonsoft json.net反序列化NullReferenceException

来自分类Dev

Newtonsoft json.net反序列化NullReferenceException

来自分类Dev

无法使用Json.NET反序列化具有多个构造函数的类

来自分类Dev

Json.Net无法反序列化具有多个泛型类型的对象?

来自分类Dev

使用JSON.NET反序列化具有奇数结构的JSON

来自分类Dev

无法反序列化当前JSON对象无法反序列化具有组列的当前JSON对象

来自分类Dev

无法使用 jackson 反序列化包含 2 个具有相同 ID 的对象的 Json

来自分类Dev

Json.Net-反序列化具有“动态”属性的对象

来自分类Dev

通过JSON.NET对具有类型的锯齿状数组进行反序列化

来自分类Dev

使用Json.NET 8.0.1无法反序列化具有字节数组属性的对象

来自分类Dev

有效JSON但无法反序列化

来自分类Dev

在C#中使用Newtonsoft Json.NET反序列化JSON

来自分类Dev

Newtonsoft JSON.net反序列化错误,其中JSON中的字段更改顺序

来自分类Dev

在C#中使用Newtonsoft Json.NET反序列化JSON

来自分类Dev

JSON反序列化(NewtonSoft JSON.NET)到XML失败

来自分类Dev

首先使用C#Json.NET对具有变量名的Json数组进行反序列化

来自分类Dev

无法使用Newtonsoft.Json.Linq反序列化对象;

来自分类Dev

无法使用Newtonsoft.Json.JsonConvert.DeserializeObject反序列化xml字符串

来自分类Dev

使用Newtonsoft Json.Net反序列化数组对象

来自分类Dev

如何反序列化Newtonsoft Json.NET引用以分离单独的实例

来自分类Dev

使用带有JSON.Net的自定义反序列化器反序列化JSON

来自分类Dev

Java无法反序列化JSON

来自分类Dev

无法反序列化JSON

来自分类Dev

无法反序列化JSON内容

来自分类Dev

Json Array无法反序列化

来自分类Dev

无法从CouchDB反序列化Json

来自分类Dev

无法反序列化JSON

Related 相关文章

  1. 1

    JSON .Net序列化无法正常工作

  2. 2

    Newtonsoft JSON.NET反序列化错误

  3. 3

    Newtonsoft json.net反序列化NullReferenceException

  4. 4

    Newtonsoft json.net反序列化NullReferenceException

  5. 5

    无法使用Json.NET反序列化具有多个构造函数的类

  6. 6

    Json.Net无法反序列化具有多个泛型类型的对象?

  7. 7

    使用JSON.NET反序列化具有奇数结构的JSON

  8. 8

    无法反序列化当前JSON对象无法反序列化具有组列的当前JSON对象

  9. 9

    无法使用 jackson 反序列化包含 2 个具有相同 ID 的对象的 Json

  10. 10

    Json.Net-反序列化具有“动态”属性的对象

  11. 11

    通过JSON.NET对具有类型的锯齿状数组进行反序列化

  12. 12

    使用Json.NET 8.0.1无法反序列化具有字节数组属性的对象

  13. 13

    有效JSON但无法反序列化

  14. 14

    在C#中使用Newtonsoft Json.NET反序列化JSON

  15. 15

    Newtonsoft JSON.net反序列化错误,其中JSON中的字段更改顺序

  16. 16

    在C#中使用Newtonsoft Json.NET反序列化JSON

  17. 17

    JSON反序列化(NewtonSoft JSON.NET)到XML失败

  18. 18

    首先使用C#Json.NET对具有变量名的Json数组进行反序列化

  19. 19

    无法使用Newtonsoft.Json.Linq反序列化对象;

  20. 20

    无法使用Newtonsoft.Json.JsonConvert.DeserializeObject反序列化xml字符串

  21. 21

    使用Newtonsoft Json.Net反序列化数组对象

  22. 22

    如何反序列化Newtonsoft Json.NET引用以分离单独的实例

  23. 23

    使用带有JSON.Net的自定义反序列化器反序列化JSON

  24. 24

    Java无法反序列化JSON

  25. 25

    无法反序列化JSON

  26. 26

    无法反序列化JSON内容

  27. 27

    Json Array无法反序列化

  28. 28

    无法从CouchDB反序列化Json

  29. 29

    无法反序列化JSON

热门标签

归档