【发布时间】:2013-10-22 07:34:36
【问题描述】:
我有我真实代码的简单示例。我需要序列化为 JSON 并反序列化类TestClass 的返回对象,该对象派生自Letters。这两个类都有带参数的构造函数。
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;
}
}
TestClass 的对象被序列化为有效的 JSON,但是当我尝试将其反序列化回对象时,NotSupportedException 会抛出消息 Collection is of a fixed size。
这是我的测试
[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);
}
【问题讨论】:
-
为什么一定要用Array而不是
List<string>? -
因为我需要对类进行序列化和反序列化,这些类是存在的,而且不容易更改。重写所有类是最后的可能性。
标签: c# json serialization json.net