使XML元素成为必需元素

时间:2017-11-20 14:15:06

标签: asp.net xml deserialization

这里我正在开发一个程序,它将序列化一个XML文件asp.net对象。我的问题是我找不到使XML文件中必须包含标记的属性。

您将在下面找到我的对象的定义。

[System.SerializableAttribute()]
public class EchangeIdentification
{
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("agrement")]
    public string Agrement{ get; set; }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("cvi")]
    public string NumeroCvi { get; set; }

    /// <remarks/>
    [Required]
    [XmlElement("siret")]
    public string Siret { get; set; }
}

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法使用XmlSerializer以声明方式强制要求元素和属性。可以为null的C#对象属性始终是可选的。

一些观察

XML序列化程序不使用 [Serializable]。

使用XML Serializer无法使其成为必需,但如果您不必使用XmlSerializer? DataContractSerializer提供以下选项:

[DataMember(IsRequired = true)]

你不需要&#34;属性&#34;代码中的名称,您的代码可能如下所示

[Serializable]
public class EchangeIdentification
{
    [XmlElement("agrement")]
    public string Agrement{ get; set; }

    [XmlElement("cvi")]
    public string NumeroCvi { get; set; }

    [XmlElement("siret")]
    public string Siret { get; set; }
}

答案 1 :(得分:0)

定义&#34;序列化XML文件asp.net对象&#34; &#34;强制要求在XML中使用标记&#34; 。这一切都取决于你如何使用这个课程。

您是否将其用作反序列化容器,您将反序列化您收到的XML?然后创建一个XSD架构,并在序列化之前(或者更确切地说)在序列化期间验证传入的XML。请参阅Validating an XML against referenced XSD in C#

另一方面,如果此代码的用户在运行时分配此类的实例属性,并通过XmlSerializer对其进行序列化,则可以在序列化后验证输出。请参阅上面的关联问题和Can I fail to deserialize with XmlSerializer in C# if an element is not found?

或者,如果[Required]属性具有其类型的默认值,您可以implement serialization callbacks创建一个抛出异常的验证方法。

我选择使用XSD路线。