WCF İpucu: CollectionDataContractAttribute ile Dize Listesi Serileştirmesini Ayarlama

Womanne

Member
Müşterilerimizden biri, WCF web hizmeti iletişiminde değiş tokuş edilen XML’in “güzel” olmasına ve konuşmasına çok önem veriyor. Bir dilek, dizelerin bir listesinin (List<string>) nasıl değil <string>etiketi XML’de görünmelidir, ancak seçilebilir bir ada sahip liste adıyla görünmelidir.

Duyuru



Bu C# sınıfı, öznitelik olarak bir dizeye ve bir dize listesine sahiptir.

[DataContract(Namespace = "http://www.IT-Visions.de/Demo")]
public class Mitarbeiter1
{
[DataMember]
public string Name { get; set; }
[DataMember]
public List<string> Themen { get; set; }
}

Varsayılan serileştirme şöyle görünür:

<Mitarbeiter xmlns=" "
xmlns:i=" ">
<Name>Holger Schwichtenberg</Name>
<Themen xmlns:a=" ">
<a:string>.NET</a:string>
<a:string>WCF</a:string>
<a:string>Entity Framework</a:string>
<a:string>u.a.</a:string>
</Themen>
</Mitarbeiter>

Ancak seri hale getirme sonucu şimdi şöyle görünmelidir:

<Mitarbeiter xmlns=" "
xmlns:i=" ">
<Name>Holger Schwichtenberg</Name>
<Themen>
<Thema>.NET</Thema>
<Thema>WCF</Thema>
<Thema>Entity Framework</Thema>
<Thema>u.a.</Thema>
</Themen>
</Mitarbeiter>

bu yüzden sınıfın tanımını değiştirmelisiniz. Burada kendi liste sınıfınızı oluşturmanız gerekir, yani List<string> devralma ve açıklama [CollectionDataContractAttribute] sahibi, hangisi ile ItemName elemanların nasıl çağrılması gerektiğini tanımlar. Ad alanı ayrıca size XML ad alanı üzerinde kontrol sağlar.

Duyuru

[DataContract(Namespace = "http://www.IT-Visions.de/Demo")]
public class Mitarbeiter
{
[DataMember]
public string Name { get; set; }
[DataMember]
public Themenliste Themen { get; set; }
}
[CollectionDataContractAttribute(ItemName = "Thema", Namespace = "http://www.IT-Visions.de/Demo")]
public class Themenliste : List<string>
{
}


Ne yazık ki, yalnızca ayrı bir liste sınıfıyla çalışır, çünkü [CollectionDataContractAttribute] öznitelik bildiriminin önüne konu listesini koymamalısınız: “‘CollectionDataContractAttribute’ bu tür bildirimlerde geçerli değildir. Yalnızca ‘class, struct’ bildirimlerinde geçerlidir.”


()



Haberin Sonu
 
Üst