2014-01-27 2 views
2

У меня есть следующий класс:Использования Xsd.exe для создания не-nillable поля с MinOccurs = 1 для ссылочного типа

[Serializable] 
[XmlType(TypeName = "CoreAccount")] 
public abstract class Account 
{ 
    [XmlElement(IsNullable = true)] 
    public string AccountNumber { get; set; } 
    public decimal Balance { get; set; } 
    public DateTime OpenDate { get; set; } 
} 

Я использую Xsd.exe от Microsoft для создания XML-схемы из класса. Свойство «ACCOUNTNUMBER» генерируется в XSD следующим образом:

<xs:element minOccurs="1" maxOccurs="1" name="AccountNumber" type="xs:string" /> 

Я рад, что требуется этот элемент, но я не хочу принять пустое (nillable) значение.

Я знаю, что простой вариант, чтобы вручную обновить XSD включать:

nillable="false" 

Но я хочу, чтобы быть в состоянии сделать это программно, так что инструмент XSD.exe будет генерировать это. Есть ли у кого-нибудь предложения? Я читал в другом месте, что это ограничение .NET, но мне интересно, есть ли у кого-нибудь идеи.

Заранее спасибо

+0

Что произойдет, если вы установите 'IsNullable' ложь? – cjk

+0

Настройка IsNullable на false приводит к изменению minOccurs на 0. – Lee

+0

Ваш класс не соответствует выходу xsd, вы должны изменить атрибут вашего класса на '[XmlElement (IsNullable = false)]' –

ответ

1

Для данного класса

[Serializable] 
[XmlType(TypeName = "CoreAccount")] 
public abstract class Account 
{ 
    [XmlElement(IsNullable = false)] 
    public string AccountNumber { get; set; } 
    public decimal Balance { get; set; } 
    public DateTime OpenDate { get; set; } 
} 

всегда будет производить XSD со следующим элементом

<xs:element minOccurs="1" maxOccurs="1" name="AccountNumber" type="xs:string" /> 

Это потому, что значение по умолчанию для атрибута nillable является false См. - http://www.w3schools.com/xml/el_element.asp

nillable Дополнительно. Указывает, может ли явное значение null присваиваться элементу. Истина позволяет экземпляру элемента присвоить значение null атрибуту true. Нулевой атрибут определяется как часть пространства имен XML Schema для экземпляров. По умолчанию является ложным

Глядя на документации XSD.exe не существует способ явной генерации XSD (https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx)

Смежные вопросы