【问题标题】:Complex type class not being serialized by XmlSerializerXmlSerializer 未序列化复杂类型类
【发布时间】: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 &lt;Total /&gt; 中得到这样的行。

所有类都有[Serializable][ComplexType][XmlType] 属性。我也尝试过不同的组合。我尝试在ComplexTypeClass 属性上使用[XmlElement][XmlRoot]。然而这并没有起到任何作用。

我确实有另一个复杂类型的类,它没有接口,并且这个类被正确序列化了。

这些接口是否必须做任何事情?还是我错过了一些简单而小的东西?

编辑:摆脱接口并没有帮助。

【问题讨论】:

  • 在这种情况下,手动序列化该复杂类型会更容易(例如,作为string)。为此,您使用 [XmlIgnore] 标记现有属性并创建另一个属性(string 类型),在您序列化/反序列化复杂类型值的 getter/setter 中。这样XmlSerializer 序列化/反序列化完整类型没有问题。
  • 好吧,我会保持该选项打开,但正如我提到的,我还有另一个复杂类型,它已正确序列化
  • 问题是ComplexTypeClass 没有任何可序列化的东西(getter-only 属性是not serialized)。它与基类或接口无关(在这种情况下你会得到异常)。
  • 是的,就是这样,感谢您的帮助;)
  • @Sinatr 如果其他人偶然发现此类问题,您可以发布解决方案以供将来参考;)

标签: c# xml-serialization xmlserializer


【解决方案1】:

如果有人偶然发现这类问题,正如谦虚的@Sinatr 所指出的,ComplexTypeClass 属性

public decimal P1 { get; }
public decimal P2 { get; }
public decimal P3 { get; }

没有set,因此 XmlSerializer 无法重新填充此对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多