相关疑难解决方法(0)

如何使用Newtonsoft JSON.NET将JSON反序列化为IEnumerable <BaseType>

鉴于此JSON:

[
  {
    "$id": "1",
    "$type": "MyAssembly.ClassA, MyAssembly",
    "Email": "me@here.com",
  },
  {
    "$id": "2",
    "$type": "MyAssembly.ClassB, MyAssembly",
    "Email": "me@here.com",
  }
]
Run Code Online (Sandbox Code Playgroud)

和这些类:

public abstract class BaseClass
{
    public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)

如何将JSON反序列化为:

IEnumerable<BaseClass> deserialized;
Run Code Online (Sandbox Code Playgroud)

我不能使用,JsonConvert.Deserialize<IEnumerable<BaseClass>>()因为它抱怨BaseClass是抽象的.

c# json.net

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

使用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万
查看次数

System.Text.Json 中是否可以进行多态反序列化?

我尝试从 Newtonsoft.Json 迁移到 System.Text.Json。我想反序列化抽象类。Newtonsoft.Json 为此具有 TypeNameHandling。有没有办法通过.net core 3.0 上的 System.Text.Json 反序列化抽象类?

c# json .net-core-3.0 system.text.json

60
推荐指数
6
解决办法
3万
查看次数

使用 JsonConvert 进行序列化会丢失数据

我在我的项目中使用它是JsonConvert为了json从我的对象中创建一个字符串,但是发生了一些奇怪的事情,其中​​一个实体在这个过程中丢失了数据,这很奇怪,因为当我调试时,该实体具有值,但对于某些实体来说原因是它在这个过程中丢失。

我使用 JsonConvert.SerializeObject 方法,这是丢失数据的实体:

[DataContract]
public class MediaDTO : BaseEntityDTO
{
    [DataMember(IsRequired = true)]
    public int Id { get; set; }

    [DataMember(IsRequired = true)]
    public bool IsAlive { get; set; }

    [DataMember(IsRequired = true)]
    public string Description { get; set; }

    [DataMember(IsRequired = true)]
    public PidDTO Pid { get; set; }
}

[DataContract]
public class BaseEntityDTO
{ 
    [DataMember(IsRequired = true)]
    public bool IsDeleted { get; set; }

    [DataMember(IsRequired = true)]
    public DateTime AddedDate { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# serialization json datacontract json.net

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

Json.Net 反序列化为 C# 派生类

Json.Net没有将其接收到的对象反序列化为我的 Control 类的正确派生类。(请参阅以下对该问题的解释。另请注意,我认为这是解释该问题所需的最少代码量。提前感谢您审阅此问题。)

我正在尝试将以下类序列化为 JSON 或从 JSON 反序列化。

public class Page {
    public Guid Id { get; set; }
    public Guid CustomerId { get; set; }
    public IList<Control> Controls { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是 Control 类:

public class Control : ControlBase
{
    public override Enums.CsControlType CsControlType { get { return Enums.CsControlType.Base; } }
}
Run Code Online (Sandbox Code Playgroud)

这是 ControlBase 抽象类:

public abstract class ControlBase
{
    public Guid Id { get; set; }

    public virtual Enums.CsControlType CsControlType { get; }

    public …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net asp.net-web-api

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

如何在 Json.Net 的派生类中仅序列化非空属性

实体对象需要转换为字符串以将它们存储在日志文件中以供人类阅读。属性可以在运行时添加到派生实体。序列化在实体基类中定义。我尝试了下面的代码,但它也返回具有空值的属性。由于许多属性具有空值,这使得日志难以阅读。

Hoq 仅序列化非空属性?我也试过

        var jsonSettings = new JsonSerializerSettings()
        {
            DefaultValueHandling = DefaultValueHandling.Ignore,
            Formatting = Formatting.Indented,
            TypeNameHandling= TypeNameHandling.All
        };
        return JsonConvert.SerializeObject(this, GetType(), jsonSettings);
Run Code Online (Sandbox Code Playgroud)

这仅序列化newtonsoft json 中确认的 EntityBase 类属性不会序列化派生类属性

public class EntityBase {

        public string Serialize()
        {
            var s = new System.Web.Script.Serialization.JavaScriptSerializer();
            s.Serialize(this);

        }
     }

public class Customer: EntityBase {
  public string Name, Address;
  }
Run Code Online (Sandbox Code Playgroud)

测试用例:

  var cust= new Customer() { Name="Test"};
  Debug.Writeline( cust.Serialize());
Run Code Online (Sandbox Code Playgroud)

观察到:结果包含“地址”:空

预期:结果不应包含地址属性。

使用 ASP.NET/Mono MVC4、.NET 4.6

c# asp.net-mvc serialization json json.net

0
推荐指数
1
解决办法
3239
查看次数