Json.NET-如何使用内部构造函数序列化外部类?

sha*_*y__ 2 c# oop serialization json.net private-constructor

我需要序列化一个不能更改其源代码的类(将其视为事实),并且它来自不同的程序集。它只有一个构造函数

public class MyObject
{
    string _s;
    int _i;
    internal MyObject(string s, int i)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

JsonConvert.SerializeObject(object)因此当然会失败。我想知道是否有一种方法可以使用Json.NET来序列化此类,而不必向其添加代码甚至标记。

Nie*_*ter 6

如果您具有无参数的构造函数,则应该可以通过添加以下设置来做到这一点:

JsonSerializerSettings settings = new JsonSerializerSettings()
{
    ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};

var serializedJson = JsonConvert.DeserializeObject<MyObject>(jsonString, settings);
Run Code Online (Sandbox Code Playgroud)

问题编辑后更新:

如果您没有任何 public构造函数,并且没有无参数构造函数,那么我只知道2个选项:

  1. [JsonConstructor]属性添加到internal构造函数中(由于无法编辑类,在您的情况下这似乎不是一个选择)。
  2. 创建具有类似属性的代理类(不那么优雅,但无需更改所需的类)。