这是一个关于一般序列化的问题,但特别是我在我的 .NET 代码中使用了ServiceStack 的优秀序列化程序。
反序列化程序是否应该在属性上设置空引用?目前似乎它忽略了空引用,只允许根据类的默认值设置这些字段。例如,此测试失败:
[TestMethod]
public void Deserialize_WithNullCollection_CollectionIsNull() {
var serializer = new ServiceStack.Text.TypeSerializer<Foo>();
Foo item = new Foo() { Strings = null };
Foo result = serializer.DeserializeFromString(serializer.SerializeToString(item));
Assert.IsNull(result.Strings);
}
public class Foo {
public Foo() {
Strings = new List<string>();
}
public List<string> Strings { get; set; }
}
我相信这也许这个测试应该成功,但它没有——item.Foo 是一个空列表而不是一个空引用。在我看来,空引用是对象状态的一部分,就像任何实际引用一样。我是对还是错?