Warum wird [DataMember (EmitDefaultValue = false)] nicht empfohlen?
In WCF können Sie festlegen, einen Vertrag mit der [DataContract]
und [DataMember]
Attribute wie diese:
[DataContract]
public class Sample
{
[DataMember(EmitDefaultValue = false, IsRequired = false)]
public string Test { get; set; }
}
Dieser Artikel auf der MSDN-Website Staaten, dass die Verwendung EmitDefaultValue = false
wird nicht empfohlen:
Aber, ich mag zu verwenden, weil die XML-Datei wird generiert mit Hilfe dieser Konstruktion ist sauberer. Nicht die Angabe dieser Einstellung führt:
<Sample>
<Test xsi:nil="true"/>
</Sample>
während die mit der Einstellung wird das element weggelassen werden, wenn es keinen Wert:
<Sample>
</Sample>
Ich bin neugierig, was die Argumentation hinter der Aussage ist. Speziell da beide Schnipsel von XML-look entspricht mir (und im letzten Teil kann deserialisiert werden korrekt für diesen Vertrag).
Was ist die Argumentation hinter dieser Aussage?
InformationsquelleAutor der Frage oɔɯǝɹ | 2011-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist, am Ende des Artikels verlinkt. Die kurze version ist:
Wenn die
EmitDefaultValue
auf false gesetzt ist, ist es dargestellt in dem schema als einen Hinweis, der speziell auf die Windows Communication Foundation (WCF). Es gibt keine interoperablen Weise zur Darstellung dieser Informationen. Insbesondere die "default" - Attribut im schema nicht für diesen Zweck verwendet, dieminOccurs
Attribut betroffen ist, nur durch dieIsRequired
Einstellung, und dienillable
Attribut betroffen ist, nur durch die Art der Daten Mitglied.Den eigentlichen default-Wert zu verwenden, der nicht in das schema. Es ist bis zu den empfangenden Endpunkt angemessen zu interpretieren, ein element fehlt.
InformationsquelleAutor der Antwort Shiraz Bhaiji