【问题标题】:Removing/Hiding/Deleting a field from class when deserialising反序列化时从类中删除/隐藏/删除字段
【发布时间】:2017-06-01 16:11:35
【问题描述】:

我有一门课——比如地方

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

还有从 Place 类派生的其他类,如 City、State、Country。

我得到一个这样的 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 字段。但由于它是类的一部分,空/空 id 字段也被反序列化。 我可以从类中删除 id 字段,但它用于其他函数,所以我不能这样做。 我不想使用 XmlIgnore 属性,因为有人可能已经在其他函数中使用了该字段。

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

return Serializer.DeserializeXml<Cities>(_strCities);

【问题讨论】:

标签: c# .net angularjs


【解决方案1】:

您可以在属性上方使用 [XmlIgnore] 和 [ScriptIgnore] 属性

[XmlIgnore]
[ScriptIgnore]
public int intvar{get;set;}

【讨论】:

    【解决方案2】:

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

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

    我在MSDN 上找到了这个解释 -

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2014-05-13
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 2012-10-12
      相关资源
      最近更新 更多