2013-12-17 64 views
2

我创建了一个Serializable类与物业Serializable类不考虑字符串属性

[XmlAttribute("ToleranceSign"), DefaultValue("1")] 
    public string ToleranceSign { get; set; } 

当我序列化这个类像下面

using (StringWriter writer = new StringWriter()) 
     { 
      XmlSerializer serial = new XmlSerializer(serializeData.GetType()); 
      XmlSerializerNamespaces xns = new XmlSerializerNamespaces(); 
      xns.Add(string.Empty, string.Empty); 
      serial.Serialize(writer, serializeData, xns); 
      writer.Flush(); 
      string serialContent = writer.ToString(); 
      return serialContent; 
     } 

所有其他属性都转换成XML节点除了ToleranceSign 。我在声明中有什么错误吗?

回答

1

如果ToleranceSign的值是null,它将被忽略并且不被序列化。

如果ToleranceSign的值是"1",那么[DefaultValue("1")]将导致它不被序列化。基本上:如果您希望在不是null的情况下始终将其序列化,请不要包含该属性。

+0

谢谢马克。我已经删除了DefaultValue属性,它工作正常。由于我为ToleranceSign分配了“1”,因此它不是序列化的。我一直认为DefaultValue的工作方式与DB中的默认值一样(即如果没有赋值,它会添加默认值)! – Naveen

0

DefaultValue属性不会导致赋值。你需要通过代码来做到这一点。请参阅note。也就是说,字符串属性至少应该用String.Empty初始化以获得序列化。

+0

我正在为该属性分配“1”。 – Naveen