Bir XSD oluşturulan otomatik, C# sınıfları, bir demet. Sonra bu C# sınıflarına dayalı XML dosyaları üretiyorum. Şimdiye kadar hiçbir şey mevcut değil.Ben XSD C# oluşturulan sınıfın yarattığı XML aynı etiketine boş niteliği ve diğer özelliği olabilir mi?
sorun:
oluşturulan XML dosyaları doğrulama geçiyor ve doğrulama xsi:nil="true"
ile tüm XML etiketleri fazladan özelliğinin kullanılmasını gerektirir. Temel olarak etiketler şu şekilde görünmelidir: <testTag.01 xsi:nil="true" NV="123123" />
, ancak bunu C# ile başaramıyorum. Benim kodudur:
if (myObject.TestTag.HasValue) { t.testTag01 = new testTag01(); t.testTag01.Value = myObject.TestTag.Value; } //else //{ // t.testTag01 = new testTag01(); // t.testTag01.NV = "123123";//Not Recorded //}
Bu kod <testTag.01>SomeValue</testTag.01>
veya <testTag.01 xsi:nil="true"/>
üretir. Ben BAŞKA yorumsuz
, sonuç şöyle olacaktır: <testTag.01>SomeValue</testTag.01>
veya <testTag.01 NV="123123" />
.
Yani nasıl doğrulama aracı tarafından gerekli biçime almak için hiçbir fikrim yok. Herhangi bir fikir ?
P.S. Burada
otomatik oluşturulan C# sınıfıdır:/// [System.CodeDom.Compiler.GeneratedCodeAttribute ("XSD", "4.0.30319.33440")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute ("kod")] [System.Xml.Serialization.XmlTypeAttribute (AnonymousType = doğru mu, Ad = "http://www.blabla.org ")]
halka kısmi sınıf testTag01 {
private string nvField; private SomeEnum valueField; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string NV { get { return this.nvField; } set { this.nvField = value; } } /// <remarks/> [System.Xml.Serialization.XmlTextAttribute()] public SomeEnum Value { get { return this.valueField; } set { this.valueField = value; } } }
O bölümü değiştirmek istemez, ama bunu yapmadan imkansızdır anlıyoruz. Ayrıca, SomeEnum'u Nullable olarak ayarlamaya çalıştım. public SomeEnum? Value
, ancak bir istisna atıyor:
Cannot serialize member 'Value' of type System.Nullable`1[]. XmlAttribute/XmlText cannot be used to encode complex types.
Otomatik oluşturulan sınıfları görmeniz gerekir. Bunların genellikle düzenlenmesi gerekiyordu. Boş değerleri üretmek için kod eklemeniz gerekmemelidir. – jdweng
Dersi verdim. Ayrıca Değeri Null olarak ayarlamayı denedim, ancak bir istisna atıyor. :-( – Tech0
Bu kutudan çıkmayacak. Bkz. [** Xsi: nil Öznitelik Bağlama Desteği **: nil niteliği ve diğer özellikler] (https://msdn.microsoft.com/en-us/library/ ybce7f69.aspx) – dbc