相关疑难解决方法(0)

使用json.net反序列化没有类型信息的多态json类

Imgur api调用返回一个列表,其中包含json中表示的Gallery ImageGallery Album类.

我不知道如何使用Json.NET自动反序列化这些,因为没有$ type属性告诉反序列化器要表示哪个类.有一个名为"IsAlbum"的属性可用于区分两者.

这个问题似乎显示了一种方法,但它看起来有点像黑客.

我该如何反序列化这些类?(使用C#,Json.NET).

样本数据:

图库图片

{
    "id": "OUHDm",
    "title": "My most recent drawing. Spent over 100 hours.",
        ...
    "is_album": false
}
Run Code Online (Sandbox Code Playgroud)

画廊专辑

{
    "id": "lDRB2",
    "title": "Imgur Office",
    ...
    "is_album": true,
    "images_count": 3,
    "images": [
        {
            "id": "24nLu",
            ...
            "link": "http://i.imgur.com/24nLu.jpg"
        },
        {
            "id": "Ziz25",
            ...
            "link": "http://i.imgur.com/Ziz25.jpg"
        },
        {
            "id": "9tzW6",
            ...
            "link": "http://i.imgur.com/9tzW6.jpg"
        }
    ]
}
}
Run Code Online (Sandbox Code Playgroud)

}

c# serialization json.net imgur

66
推荐指数
2
解决办法
3万
查看次数

将JSON反序列化为多个属性

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

{
    ChildObject: 'childobjectkey1'
}
Run Code Online (Sandbox Code Playgroud)

{
    ChildObject: {
        Id: 'childobjectkey1',
        // (other properties)
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用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; }
}
Run Code Online (Sandbox Code Playgroud)

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

Newtonsoft.Json.JsonSerializationException:'.....'上已存在名为'ChildObject'的成员.使用JsonPropertyAttribute指定其他名称.

我很确定如果我可以克服这个障碍,JsonConverter方法将会起作用 - 我怀疑错误是存在的,因为JsonProperty属性用于序列化以及反序列化.在这个例子中,我对序列化这个类没兴趣 - 它只会被用作反序列化的目标.

我无法控制远程端(它是第三方API),但我希望能够实现此序列化.我不介意它是否正在使用我开始使用的方法,或者我还没有想到的方法.

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

c# json json.net

12
推荐指数
2
解决办法
6730
查看次数

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

我有一些JSON具有各种属性,其中大多数是简单的数据类型.但是,我在JSON中有一个属性,当我将它反序列化为C#类时,我只需将它反序列化为字符串.

示例JSON:

{"simpleProperty": "value1", "json":{"a":"a1", "b":"b1"}}
Run Code Online (Sandbox Code Playgroud)

除了它将是一个有效的JSON对象之外,"json"对象没有设置结构.

所以在上面的例子中,"json"的值是一个JSON对象 - 但是当它被反序列化时,我需要它作为一个字符串.

所以,如果我的C#类是:

public class MyClass
{
    public string SimpleProperty { get; set; }
    public string Json { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用:

var myClass = JsonConvert.DeserializeObject<MyClass>(jsonStr);
Run Code Online (Sandbox Code Playgroud)

我希望myClass.Json只是一个简单的字符串.

我已经考虑过为此创建一个自定义的JsonConverter,但这对于这么简单的事情来说似乎太复杂了.我必须在这里遗漏一些东西.任何方向将不胜感激.

我也看到了这篇文章 - 但它确实没有回答这个问题:JSON.Net - 如何将JSON反序列化为对象但是将属性视为字符串而不是JSON?

c# serialization json json.net

6
推荐指数
2
解决办法
6452
查看次数

标签 统计

c# ×3

json.net ×3

json ×2

serialization ×2

imgur ×1