【问题标题】:XmlSerializer and acceptable valuesXmlSerializer 和可接受的值
【发布时间】:2012-01-04 21:27:55
【问题描述】:

您好,我正在做一个项目,我应该将我的对象序列化和反序列化为 Xml 并返回到对象。我使用 XmlSerializer 类来实现这一点。所以我的问题是,如果元素的属性值无效,我无法弄清楚如何防止序列化。例如,我有一个名为 person 的元素,其中包含 1 个属性(名称) 我想防止用户在此属性中输入除 (Alex, Nick,..) 之外的其他名称,在这种情况下,我需要 xsd 限制(模式)之类的东西,但对于我的模型。我该如何解决这个问题?

【问题讨论】:

  • 很清楚:您想限制元素/属性的值?
  • 我不认为序列化应该做数据验证。数据验证应在序列化发生之前进行。
  • 我需要属性限制。
  • 你想做什么?执行验证? (并抛出异常?)?或者:有条件地包含/排除该成员?还是……?
  • 马克:在这种情况下是一个验证,我想尽可能不使用 xsd 文件。

标签: c# xml-serialization xsd xml-parsing


【解决方案1】:

如果您只想要条件序列化,您可以使用 ShouldSerialize* 模式来实现。所以如果你有一个属性Name(例如),你可以添加:

public bool ShouldSerializeName() {
    /* validate; return true to serialize, false to skip */
}

该方法需要对 XmlSerializer 公开,尽管相同的模式在其他地方也适用(例如 System.ComponentModel),即使没有公开。

【讨论】:

  • +1 实际上注意到该函数必须对 XmlSerializer 是公共的。这是我第一次看到它提到的地方。
【解决方案2】:

我不确定在某些情况下忽略某些数据是个好主意,但如果您真的想这样做,请查看IXmlSerializable Interface。我认为手动实现此接口将是满足您要求的唯一方法。

【讨论】:

  • 获得条件 XML 序列化的方法要简单得多。不过,我不确定这是要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2015-11-27
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多