虽然问题没有提及,但我假设您使用的是 YamlDotNet(或 SharpYaml,它是 YamlDotNet 的一个分支)
YamlDotNet 不支持反序列化为没有默认构造函数的类 - 但实现您想要的一个选项是反序列化为可变的中间 Builder 类型,该类型可以生成最终类型。例如
public class MyDataBuilder
{
public string Value { get; set; }
public int Number { get; set; }
public MyData Build() => new MyData(Value, Number);
}
然后使用类似的东西:
deserializer.Deserialize<MyDataBuilder>(yaml).Build();
但是,您最终将不得不为整个模型创建一组并行的构建器,例如,如果MyData
有第三个类型的参数MyOtherData
(我已将示例更改为使用记录而不是类以使其简洁):
public record MyOtherData(string OtherValue);
public record MyData(string Value, int Number, MyOtherData otherData);
在这种情况下,我们需要另一个 Builder:
public class MyOtherDataBuilder
{
public string OtherValue { get; set; }
}
MyDataBuilder
看起来像:
public class MyDataBuilder
{
public string Value { get; set; }
public int Number { get; set; }
public MyOtherDataBuilder MyOtherData { get; set; }
public MyData Build() => new MyData(Value, Number, MyOtherData.Build());
}