将JSON反序列化为多个属性

理查德

我正在针对返回JSON数据的第三方API进行编程,但是格式可能有点奇怪。某些属性可以是一个对象(包含一个Id属性),也可以是一个字符串(它是该对象的ID)。例如,以下两个都是有效的:

{
    ChildObject: 'childobjectkey1'
}

{
    ChildObject: {
        Id: 'childobjectkey1',
        // (other properties)
    }
}

我正在尝试使用JSON.net将其反序列化为强类型类,但到目前为止运气还不足。我最好的主意是将其序列化为两个属性,一个为字符串,另一个为对象,并对每个属性使用自定义JsonConverter以允许变量行为:

public abstract class BaseEntity
{
    public string Id { get; set; }
}

public class ChildObject : BaseEntity { }

public class MyObject
{
    [JsonProperty("ChildObject")]
    [JsonConverter(typeof(MyCustomIdConverter))]
    public string ChildObjectId { get; set; }

    [JsonProperty("ChildObject")]
    [JsonConverter(typeof(MyCustomObjectConverter))]
    public ChildObject ChildObject { get; set; }
}

但是,JsonProperty在具有相同PropertyName的两个属性上设置属性会导致异常:

Newtonsoft.Json.JsonSerializationException:'.....'上已经存在一个名称为'ChildObject'的成员。使用JsonPropertyAttribute指定另一个名称。

我相当确定,如果我能克服此障碍,则JsonConverter方法将起作用-我怀疑错误在那里,因为JsonProperty属性用于序列化和反序列化。在这种情况下,我对序列化该类没有兴趣-它将仅用作反序列化的目标。

我无法控制远端(这是第三方API),但是我希望能够实现此序列化。我不在乎它是在使用我已经开始使用的方法,还是我尚未想到的方法。

这个问题也有关系,但是没有答案。

亚历克斯·菲利波维奇(Alex Filipovici)

尝试以下操作(如果要在代码中使用它,请进行彻底的验证,以进行扩展):

public class MyObject
{
    public ChildObject MyChildObject;
    public string MyChildObjectId;

    [JsonProperty("ChildObject")]
    public object ChildObject
    {
        get
        {
            return MyChildObject;
        }
        set
        {
            if (value is JObject)
            {
                MyChildObject = ((JToken)value).ToObject<ChildObject>();
                MyChildObjectId = MyChildObject.Id;
            }
            else
            {
                MyChildObjectId = value.ToString();
                MyChildObject = null;
            }
        }
    }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Json Property的属性反序列化为Property

来自分类Dev

将JSON反序列化为通用接口属性

来自分类Dev

将json.net属性反序列化为大写

来自分类Dev

将JSON属性反序列化为类

来自分类Dev

将JSON反序列化为子类

来自分类Dev

无法使用Json.Net将certian json属性反序列化为c#属性

来自分类Dev

使用System.Text.Json将JSON反序列化为包含动态属性的类

来自分类Dev

将多个类序列化为JSON

来自分类Dev

将QByteArray反序列化为多个QVariantMap

来自分类Dev

将索引属性反序列化为数组

来自分类Dev

将某些嵌套属性反序列化为类

来自分类Dev

将xml属性反序列化为List <String>

来自分类Dev

将属性反序列化为 c# 的值

来自分类Dev

用Jackson将多个json键反序列化为一个字段

来自分类Dev

Jackson将JSON对象字段反序列化为单个列表属性

来自分类Dev

如何将JSON反序列化为具有HashMap属性的对象?

来自分类Dev

将JSON反序列化为动态后无法访问属性

来自分类Dev

避免将JSON字符串令牌反序列化为数字属性

来自分类Dev

将JSON对象属性反序列化为字符串

来自分类Dev

将JSON反序列化为通用类型,其中集合属性名称根据类型而变化

来自分类Dev

如何将JSON包装的集合属性反序列化为通用类?

来自分类Dev

将JSON反序列化为包含两个Dictionary属性的C#类

来自分类Dev

将一属性对象的JSON数组反序列化为字符串集合

来自分类Dev

通过属性名称以及JsonProperty将JSON反序列化为对象

来自分类Dev

使用kotlinx.serialization将json对象的属性反序列化为String

来自分类Dev

告诉Json.Net将JArray反序列化为类属性

来自分类Dev

杰克逊:父类的属性被忽略:将json反序列化为数据

来自分类Dev

将json文件反序列化为c#list <object>,但是属性不会进入对象

来自分类Dev

将JSON反序列化为通用类型,其中集合属性名称根据类型而变化

Related 相关文章

  1. 1

    将Json Property的属性反序列化为Property

  2. 2

    将JSON反序列化为通用接口属性

  3. 3

    将json.net属性反序列化为大写

  4. 4

    将JSON属性反序列化为类

  5. 5

    将JSON反序列化为子类

  6. 6

    无法使用Json.Net将certian json属性反序列化为c#属性

  7. 7

    使用System.Text.Json将JSON反序列化为包含动态属性的类

  8. 8

    将多个类序列化为JSON

  9. 9

    将QByteArray反序列化为多个QVariantMap

  10. 10

    将索引属性反序列化为数组

  11. 11

    将某些嵌套属性反序列化为类

  12. 12

    将xml属性反序列化为List <String>

  13. 13

    将属性反序列化为 c# 的值

  14. 14

    用Jackson将多个json键反序列化为一个字段

  15. 15

    Jackson将JSON对象字段反序列化为单个列表属性

  16. 16

    如何将JSON反序列化为具有HashMap属性的对象?

  17. 17

    将JSON反序列化为动态后无法访问属性

  18. 18

    避免将JSON字符串令牌反序列化为数字属性

  19. 19

    将JSON对象属性反序列化为字符串

  20. 20

    将JSON反序列化为通用类型,其中集合属性名称根据类型而变化

  21. 21

    如何将JSON包装的集合属性反序列化为通用类?

  22. 22

    将JSON反序列化为包含两个Dictionary属性的C#类

  23. 23

    将一属性对象的JSON数组反序列化为字符串集合

  24. 24

    通过属性名称以及JsonProperty将JSON反序列化为对象

  25. 25

    使用kotlinx.serialization将json对象的属性反序列化为String

  26. 26

    告诉Json.Net将JArray反序列化为类属性

  27. 27

    杰克逊:父类的属性被忽略:将json反序列化为数据

  28. 28

    将json文件反序列化为c#list <object>,但是属性不会进入对象

  29. 29

    将JSON反序列化为通用类型,其中集合属性名称根据类型而变化

热门标签

归档