По-видимому, является спорным, что IDE, следует проверить , чтобы увидеть, могут ли они связать код они создают, прежде чем тратить время компиляции
Но я придерживаюсь мнения, что я не должен скомпилируйте миллионы строк кода только для того, чтобы понять, что Windows пытается заблокировать файл, который я пытаюсь создать, потому что у другого программиста есть странная проблема с многопоточностью, которая требует от него отложить выгрузку DLL на 3 минуты после того, как они не должны использоваться ,
Параметры по умолчанию для атрибута DataMember:
bool EmitDefaultValue (default true)
bool IsRequired (default false)
Если свойство, которое вы предоставляете, является типом значения, не допускающим значения NULL, вам следует используйте:
[DataMember(IsRequired = true)]
public int InvoiceNo;
You could read the explanation here.
Quote from XmlSerializer:
If a schema includes an element that is optional (minOccurs = '0'), or if the schema includes a default value, you have two options. One option is to use System.ComponentModel.DefaultValueAttribute to specify the default value, as shown in the following code. Another option is to use a special pattern to create a Boolean field recognized by the XmlSerializer, and to apply the XmlIgnoreAttribute to the field. The pattern is created in the form of propertyNameSpecified. For example, if there is a field named "MyFirstName" you would also create a field named "MyFirstNameSpecified" that instructs the XmlSerializer whether to generate элемент XML с именем «MyFirstName».
Единственный приемлемый для меня обходной путь, который я до сих пор использовал, - это использовать XmlSerializer вместо DataContractSerializer с помощью XmlSerializerFormatAttribute .
Также вы можете использовать [DataMember (isRequired = True)]