反序列化时从类中删除/隐藏/删除字段

时间:2017-01-17 14:35:11

标签: c# .net angularjs

我有一节课 - 说地方

public class Place{
    public int id;
    public string name;
    public string slug;
}

还有其他类,如City,State,Country,这些类派生自Place类。

我得到一个像这样的XML字符串,它有一系列城市

<cities>
 <City>
  <name>
   <![CDATA[Mumbai]]>
  </name>
  <slug>
   <![CDATA[mumbai]]>
  </slug>
 </City>
<City>
  <name>
   <![CDATA[Thane]]>
  </name>
  <slug>
   <![CDATA[thane]]>
  </slug>
 </City>
</cities>

我在city数组中反序列化该字符串并发送到Angular UI。

在前端,没有使用id字段。但由于它是类的一部分,因此空/ null id字段也会反序列化。 我可以从类中删除id字段,但它在其他函数中使用,所以我不能这样做。 我不想使用XmlIgnore属性,因为某些人可能已在其他功能中使用过该字段。

我的问题是,有没有办法在发送之前删除id字段?

return Serializer.DeserializeXml<Cities>(_strCities);

2 个答案:

答案 0 :(得分:0)

您可以在属性

上使用[XmlIgnore]和[ScriptIgnore]属性
[XmlIgnore]
[ScriptIgnore]
public int intvar{get;set;}

答案 1 :(得分:0)

解决方案非常简单。 我不得不添加另一个函数 - ShouldSerializePropertyName。 该函数将返回true或false,并根据结果将序列化或反序列化id:)

public bool ShouldSerializeid()
        {
            return !(id.Equals(string.Empty)|| id.Equals(0));
        }

我在MSDN -

上找到了这个解释
  

ShouldSerialize和Reset是您可以提供的可选方法   对于属性,如果属性没有简单的默认值。   如果属性具有简单的默认值,则应该应用   DefaultValueAttribute并为属性提供默认值   而是构造函数。