【问题标题】:C# serializer skipping a property [duplicate]C#序列化程序跳过一个属性[重复]
【发布时间】:2015-10-20 21:58:01
【问题描述】:

我有一个类 DocumentMetaData,我正在尝试将其序列化为 XML。它是一个公共类,其中的所有元素都是公共的,但是有一个元素没有出现在 XML 输出中,但应该出现在 XML 输出中。 (另一个用 XmlIgnore 标记。)我试图找出这个元素被跳过的原因。

public class DocumentMetaData
{
  [XmlElement(ElementName="docType")]
  public string DocType { get; set; }

  [XmlElement(ElementName = "companyName")]
  public string CompanyName { get; set; }

  [XmlElement(ElementName = "countryName")]
  public string CountryName { get; set; }

  [XmlElement(ElementName = "clientName")]
  public string ClientName { get; set; }

  [XmlElement(ElementName = "manufacturer")]
  public string Manufacturer { get; set; }

  [XmlIgnore]
  public DateTime ConversionDate { get; set; }

  [XmlElement(ElementName = "conversionDate")]
  public string ConversionDateString
  {
     get { return ConversionDate.ToShortDateString(); }
  }

}

生成的 XML 如下所示:

<docMeta>
    <docType>Text</docType>
    <companyName>Text</companyName>
    <countryName>Text</countryName>
    <clientName>Text</clientName>
    <manufacturer>Text</manufacturer>
</docMeta>

如果我在调用序列化之前检查数据,所有字段中都有值。为什么 ConversionDateString 字段不序列化?

【问题讨论】:

  • 可能是因为没有二传手。

标签: c# xml xml-serialization


【解决方案1】:

您的属性需要一个 setter 才能被序列化。不然怎么反序列化呢?

您可以将string 解析为DateTime 并在setter 中分配给ConversionDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多