C# XmlSerializer和可接受的值

C# XmlSerializer和可接受的值,c#,xml-serialization,xsd,xml-parsing,C#,Xml Serialization,Xsd,Xml Parsing,您好,我正在从事一个项目,在这个项目中,我应该将我的对象序列化和反序列化为Xml并返回到对象。我使用XmlSerializer类来实现这一点。因此,我的问题是,如果元素的属性值无效,我不知道如何防止序列化。例如,我有一个名为person的元素,它包含1个属性(name) 我想防止用户在这个属性中使用除(Alex,Nick,…)以外的其他名称。在本例中,除了我的模型之外,我需要类似xsd限制(模式)的东西。如何解决此问题?我不确定在某些情况下忽略某些数据是否是一个好主意,但如果您真的想这样做,请查

您好,我正在从事一个项目,在这个项目中,我应该将我的对象序列化和反序列化为Xml并返回到对象。我使用XmlSerializer类来实现这一点。因此,我的问题是,如果元素的属性值无效,我不知道如何防止序列化。例如,我有一个名为person的元素,它包含1个属性(name)
我想防止用户在这个属性中使用除(Alex,Nick,…)以外的其他名称。在本例中,除了我的模型之外,我需要类似xsd限制(模式)的东西。如何解决此问题?

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

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

如果只需要条件序列化,可以使用ShouldSerialize*模式实现。因此,如果您有一个属性
名称
(例如),您可以添加:

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

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

如果您只需要条件序列化,可以使用ShouldSerialize*模式。因此,如果您有一个属性
名称
(例如),您可以添加:

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

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

非常清楚:您想限制元素/属性的值吗?我认为序列化不应该进行数据验证。数据验证应该在序列化发生之前进行。Maessi需要对属性进行限制。您想做什么?执行验证?(并抛出异常?)?或:有条件地包括/排除该成员?或者…?Mark:在这种情况下,如果可能的话,我想在不使用xsd文件的情况下进行验证。非常清楚:您想限制元素/属性的值吗?我不认为序列化应该进行数据验证。数据验证应该在序列化发生之前进行。Maessi需要对属性进行限制。您想做什么?执行验证?(并抛出异常?)?或:有条件地包括/排除该成员?或者…?Mark:在这种情况下,如果可能的话,我想在不使用xsd文件的情况下进行验证。不过,我不确定这是不是必要的。有很多更简单的方法可以实现条件XML序列化。不过,我不确定这是否是要求。+1实际上是为了说明函数必须是XmlSerializer的公共函数。这是我第一次看到它被提到的地方。+1实际上是为了说明函数必须是XmlSerializer的公共函数。这是我第一次看到它被提到的地方。