私は実際のコードの簡単な例を持っています。 JSONにシリアライズし、Letters
から派生したクラスTestClass
の逆オブジェクトを逆直列化する必要があります。どちらのクラスもパラメータ付きのコンストラクタを持っています。 TestClass
のコレクションは固定サイズのため、デシリアライズできません。
public class TestClass : Letters
{
public string[] Names { get; private set; }
public TestClass(string[] names)
: base(names)
// : base(new [] { "A", "B", })
// : base(names.Select(a => a.Substring(0, 1)).ToArray())
{
Names = names;
}
}
public abstract class Letters
{
public string[] FirstLetters { get; private set; }
protected Letters(string[] letters)
{
FirstLetters = letters;
}
}
オブジェクトが有効なJSONにシリアライズされているが、私はそれが戻ってオブジェクトにデシリアライズしようとすると、非サポート例外は、メッセージコレクションにスローで固定サイズでした。
は、ここでそれ以外の場合は、コンストラクタを呼び出す方法を知らない、私のテストにそれらをデシリアライズするために、パラメータなしのコンストラクタを持っているすべてのクラスを必要とJson.Net
[Fact]
public void JsonNamesTest()
{
var expected = new TestClass(new [] { "Alex", "Peter", "John", });
var serialized = JsonConvert.SerializeObject(expected);
Console.WriteLine(serialized);
Assert.False(string.IsNullOrWhiteSpace(serialized));
var actual = JsonConvert.DeserializeObject<TestClass>(serialized);
AssertEx.PrimitivePropertiesEqual(expected, actual);
}
を持っている唯一のパブリックコンストラクタですリスト 'の? –
私はクラスを直列化して逆直列化する必要があるので、存在し、変更するのは簡単ではありません。最後にすべてのクラスを書き直すことができます。 – Rudis