相关疑难解决方法(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.Net序列化

我们希望能够从/向C#类序列化/反序列化json,主类具有多态子对象的实例.使用Json.Net的TypeNameHandling.Auto设置很容易.但是,我们希望在没有"$ type"字段的情况下这样做.

第一个想法是能够将"$ type"重命名为我们选择的值,并使该类型的值为枚举,以便正确映射子类型.我没有看到这是一个选项,但很高兴听到是否有可能.

第二个想法是沿着以下几行......下面是类的第一次传递,顶级类有一个指示符(SubTypeType),关于子对象(SubTypeData)中包含的数据类型.我已经挖了一些Json.Net文档,并尝试了一些东西,但没有运气.

我们目前完全控制数据定义,但一旦部署,就会锁定.

public class MainClass
{
  public SubType          SubTypeType { get; set; }
  public SubTypeClassBase SubTypeData { get; set; }
}

public class SubTypeClassBase
{
}

public class SubTypeClass1 : SubTypeClassBase
{
  public string AaaField { get; set; }
}

public class SubTypeClass2 : SubTypeClassBase
{
  public string ZzzField { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# serialization json.net

10
推荐指数
3
解决办法
6341
查看次数

带接口的 JsonConverter

我有一个来自客户端并自动从 Web Api 2 反序列化的对象。

现在我的模型的一个属性有问题。此属性“CurrentField”属于 IField 类型,此接口有 2 种不同的实现。

这是我的模型(只是一个假人)

public class MyTest
{
    public IField CurrentField {get;set;}
}

public interface IField{
    string Name {get;set;}
}

public Field1 : IField{
    public string Name {get;set;}
    public int MyValue {get;set;}
}

public Field2 : IField{
    public string Name {get;set;}
    public string MyStringValue {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我试图创建一个自定义 JsonConverter 来找出我的客户端对象是什么类型(Field1 或 Field2),但我不知道如何。

我的转换器被调用,当我调用 var obj = JObject.load(reader); 时我可以看到对象。

但我怎样才能知道它是什么类型呢?我不能做类似的事情

if(obj is Field1) ...
Run Code Online (Sandbox Code Playgroud)

这是我应该检查的方法吗?

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer …
Run Code Online (Sandbox Code Playgroud)

c# json asp.net-web-api2

5
推荐指数
1
解决办法
4547
查看次数

标签 统计

c# ×3

json.net ×2

serialization ×2

asp.net-web-api2 ×1

imgur ×1

json ×1