这里我正在开发一个程序,它将序列化一个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; }
}
答案 0 :(得分:1)
据我所知,没有办法使用XmlSerializer以声明方式强制要求元素和属性。可以为null的C#对象属性始终是可选的。
一些观察
XML序列化程序不使用使用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路线。