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
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