如何使用 json.net(而不是 JObject)反序列化为对象

阿斯盖哈拉斯

使用 json.net 这个测试默认失败:

JsonConvert.DeserializeObject(
    JsonConvert.SerializeObject(new object()), typeof(object)
).ShouldBeOfType<object>(); // actual type is JObject

有没有办法改变这种行为,让它反序列化为实际请求的类型?

布赖恩·罗杰斯

你有一个退化的测试用例。如果您指示 Json.Net 反序列化为 type object,则是在告诉它 JSON 可以表示任何可能的对象。所以JObject在这种情况下它会选择使用 a ,因为你不是特定的并且 aJObject可以处理任何 JSON 对象。不期望您想要反序列化为一个字面上的空object实例,因为这不是一件非常有用的事情。如果 JSON 包含任何数据,反序列化后您将无法访问该数据:object没有属性!

您可以通过创建一个空类Foo并使用它代替来修复您的测试object

JsonConvert.DeserializeObject(
    JsonConvert.SerializeObject(new Foo()), typeof(Foo)
).ShouldBeOfType<Foo>();

如果您确实需要强制 Json.Netobjectobject指定为类型反序列化为空实例,则可以使用如下自定义来实现JsonConverter

public class EmptyObjectConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(object);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);  // consume the JSON object from the reader 
        return token.Type == JTokenType.Null ? null : new object();
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

然后将转换器的实例传递给JsonConvert.DeserializeObject()

JsonConvert.DeserializeObject(
    JsonConvert.SerializeObject(new object()), 
    typeof(object),
    new EmptyObjectConverter()
).ShouldBeOfType<object>();

小提琴:https : //dotnetfiddle.net/7xZ7tm

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Newtonsoft Json序列化器/反序列化器-如何使用通用对象而不是JObject?

来自分类Dev

使用NewtonSoft将JSON对象反序列化为.Net对象

来自分类Dev

使用JSON.Net将JSON反序列化为对象或数组

来自分类Dev

JSON .NET使用对象键/名称反序列化为复杂类型

来自分类Dev

如何使用json.net将复杂的分离的(“列” /“数据”)json反序列化为c#对象

来自分类Dev

如何使用json.net将复杂的分离的(“列” /“数据”)json反序列化为c#对象

来自分类Dev

将Json对象反序列化为.NET对象

来自分类Dev

使用xsd.exe反序列化-如何反序列化为对象而不是DataSet?

来自分类Dev

如何使用Jackson将反序列化的JSON反序列化为忽略键的对象?

来自分类Dev

使用Json.Net反序列化,将子对象反序列化为包含json的字符串/类似字符串?

来自分类Dev

将JSON反序列化为.net对象

来自分类Dev

JSON反序列化为VB.Net对象

来自分类Dev

如何将JSON反序列化为Swift对象?

来自分类Dev

如何使用Json.Net将缺失的属性反序列化为F#记录中的空列表而不是null

来自分类Dev

如何使用Jackson将Java Enums序列化和反序列化为JSON对象

来自分类Dev

使用Json.net反序列化为任何未知类型对对象有效,但对值类型无效

来自分类Dev

将JObject反序列化为.NET对象列表

来自分类Dev

如何使用Json.Net将对象序列化为JSON字符串属性而不是对象

来自分类Dev

JSON.NET将实现IDictionary <TKey,TValue>的对象反序列化为字典,如何强制常规类序列化?

来自分类Dev

使用Json.Net反序列化Json对象

来自分类Dev

使用PHP中的类型将嵌套对象序列化/反序列化为JSON

来自分类Dev

使用Json.NET反序列化复杂对象

来自分类Dev

无法使用Json.Net反序列化对象

来自分类Dev

使用JSON.net反序列化对象

来自分类Dev

使用json.net将嵌套的json反序列化为vb.net类

来自分类Dev

使用Json.NET将嵌套的JSON反序列化为平面类

来自分类Dev

使用json.net和包含@符号的json属性反序列化为F#类型

来自分类Dev

使用JSON.NET将JSON数据(数组)反序列化为C#

来自分类Dev

使用JSON.NET将递归JSON反序列化为C#

Related 相关文章

  1. 1

    Newtonsoft Json序列化器/反序列化器-如何使用通用对象而不是JObject?

  2. 2

    使用NewtonSoft将JSON对象反序列化为.Net对象

  3. 3

    使用JSON.Net将JSON反序列化为对象或数组

  4. 4

    JSON .NET使用对象键/名称反序列化为复杂类型

  5. 5

    如何使用json.net将复杂的分离的(“列” /“数据”)json反序列化为c#对象

  6. 6

    如何使用json.net将复杂的分离的(“列” /“数据”)json反序列化为c#对象

  7. 7

    将Json对象反序列化为.NET对象

  8. 8

    使用xsd.exe反序列化-如何反序列化为对象而不是DataSet?

  9. 9

    如何使用Jackson将反序列化的JSON反序列化为忽略键的对象?

  10. 10

    使用Json.Net反序列化,将子对象反序列化为包含json的字符串/类似字符串?

  11. 11

    将JSON反序列化为.net对象

  12. 12

    JSON反序列化为VB.Net对象

  13. 13

    如何将JSON反序列化为Swift对象?

  14. 14

    如何使用Json.Net将缺失的属性反序列化为F#记录中的空列表而不是null

  15. 15

    如何使用Jackson将Java Enums序列化和反序列化为JSON对象

  16. 16

    使用Json.net反序列化为任何未知类型对对象有效,但对值类型无效

  17. 17

    将JObject反序列化为.NET对象列表

  18. 18

    如何使用Json.Net将对象序列化为JSON字符串属性而不是对象

  19. 19

    JSON.NET将实现IDictionary <TKey,TValue>的对象反序列化为字典,如何强制常规类序列化?

  20. 20

    使用Json.Net反序列化Json对象

  21. 21

    使用PHP中的类型将嵌套对象序列化/反序列化为JSON

  22. 22

    使用Json.NET反序列化复杂对象

  23. 23

    无法使用Json.Net反序列化对象

  24. 24

    使用JSON.net反序列化对象

  25. 25

    使用json.net将嵌套的json反序列化为vb.net类

  26. 26

    使用Json.NET将嵌套的JSON反序列化为平面类

  27. 27

    使用json.net和包含@符号的json属性反序列化为F#类型

  28. 28

    使用JSON.NET将JSON数据(数组)反序列化为C#

  29. 29

    使用JSON.NET将递归JSON反序列化为C#

热门标签

归档