Microsoft XmlSerializer 中似乎存在错误/不一致:如果您有一个用属性标记的System.ComponentModel.DefaultValue
属性,则不会序列化。很公平——这可以看作是一种预期的行为。
问题是反序列化时不尊重相同的属性。下面的代码说明了这个问题。
问题是我怎么能绕过这个?我可能有数百个业务类在 UI 层(视图)中使用了默认值,因此构造函数中的默认值初始化不是一个选项。它必须是通用的。我可以创建一个全新的默认属性,但这似乎是重复的工作。您是否看到了一种覆盖 XmlSerializer 行为的方法,或者我应该只使用另一个可以更好地完成工作的序列化程序?
示例代码:
public class DefaultValueTestClass
{
[System.ComponentModel.DefaultValue(10000)]
public int Foo { get; set; }
}
[TestMethod]
public void SimpleDefaultValueTest()
{
// Create object and set the property value TO THE DEFAULT
var before = new DefaultValueTestClass();
before.Foo = 10000;
// Serialize => xml
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(DefaultValueTestClass));
string xml;
using (var stream = new System.IO.StringWriter())
{
serializer.Serialize(stream, before);
xml = stream.ToString();
}
// Deserialize the same object
DefaultValueTestClass after;
using (var reader = new System.IO.StringReader(xml))
{
after = (DefaultValueTestClass)serializer.Deserialize(reader);
}
// before.Foo = 10000
// after.Foo = 0
Assert.AreEqual(before.Foo, after.Foo);
}