【问题标题】:Serializing an object to JSON in which the type is not known将对象序列化为类型未知的 JSON
【发布时间】:2020-12-09 12:41:31
【问题描述】:

我现在有一个包含两个类的小程序。其中一个类包含我的应用程序入口点并在启动时处理来自命令行的参数,另一个类包含我需要序列化为 JSON 格式然后反序列化的选项。

问题:在我的主类(包含入口点的类)中,我想创建一个通用方法来将我扔给它的任何对象序列化为 JSON 文件。它看起来像这样:

public string Serialize(Object obj)
{
    JsonSerializerOptions o = new JsonSerializerOptions();
    o.WriteIndented = true;

    return JsonSerializer.Serialize((obj, o));
}

当我使用“Object obj”作为参数时,它只会创建一个包含“{}”的 JSON 文件 但是,当我这样编写它并指定对象类型(在本例中为“设置”,因为这是我目前需要序列化的类)时,它会按预期使用信息填充字段。

public string Serialize(Settings so)
{
    JsonSerializerOptions o = new JsonSerializerOptions();
    o.WriteIndented = true;

    return JsonSerializer.Serialize((so, o));
}

我希望能够将任何类型的对象传递给它并让它正确地序列化它。这样我就不必编写 3 或 4 个方法来准确指定它将接收哪种类型的对象来序列化每个类(即 Settings、DebugInfo 等..)

谁能告诉我最简单的方法?我尝试了多种不同的覆盖,但似乎无法让它工作。它总是一个空的 JSON 文件,除非我在参数中明确指定它正在接收哪个类。

我正在使用 DotNet Core 3.1 和命名空间

System.Text.Json;
System.Text.Json.Serialization;

【问题讨论】:

    标签: c# json .net-core serialization


    【解决方案1】:

    你可以让你的方法通用:

    public string Serialize<T>(T obj)
    {
        JsonSerializerOptions o = new JsonSerializerOptions();
        o.WriteIndented = true;
    
        return JsonSerializer.Serialize<T>((obj, o));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 2019-12-08
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多