【发布时间】:2017-04-06 17:08:48
【问题描述】:
所以我有课:
public class classA : BaseClass
{
public classA(){}
}
public abstract class BaseClass
{
public ComplexTypeClass Total { get; set; }
public List<Item> Items {get; set; }
//some other properties
}
public class ComplexTypeClass : ValueObject<ComplexTypeClass>
{
public ComplexTypeClass()
{
}
public ComplexTypeClass(decimal p1, decimal p2, decimal p)
{
P1 = p1;
P2 = p2;
P3 = p3;
}
public decimal P1 { get; }
public decimal P2 { get; }
public decimal P3 { get; }
//some methods and validations
}
public abstract class ValueObject<T> : IEquatable<T>, IValidatableObject where T : ValueObject<T>
{
//all implemented interfaces methods
}
然后我尝试序列化classA,所有属性和列表都正确序列化,除了ComplexTypeClass 属性。对于这个属性,我在 xml <Total /> 中得到这样的行。
所有类都有[Serializable]、[ComplexType]、[XmlType] 属性。我也尝试过不同的组合。我尝试在ComplexTypeClass 属性上使用[XmlElement]、[XmlRoot]。然而这并没有起到任何作用。
我确实有另一个复杂类型的类,它没有接口,并且这个类被正确序列化了。
这些接口是否必须做任何事情?还是我错过了一些简单而小的东西?
编辑:摆脱接口并没有帮助。
【问题讨论】:
-
在这种情况下,手动序列化该复杂类型会更容易(例如,作为
string)。为此,您使用[XmlIgnore]标记现有属性并创建另一个属性(string类型),在您序列化/反序列化复杂类型值的 getter/setter 中。这样XmlSerializer序列化/反序列化完整类型没有问题。 -
好吧,我会保持该选项打开,但正如我提到的,我还有另一个复杂类型,它已正确序列化
-
问题是
ComplexTypeClass没有任何可序列化的东西(getter-only 属性是not serialized)。它与基类或接口无关(在这种情况下你会得到异常)。 -
是的,就是这样,感谢您的帮助;)
-
@Sinatr 如果其他人偶然发现此类问题,您可以发布解决方案以供将来参考;)
标签: c# xml-serialization xmlserializer