2013-11-15 24 views
5

C# içinde bir nesne listesi içeren bir nesneyi serileştirirseniz, bu liste de serileştirir mi?C# İçindeki bir nesne listesiyle bir nesneyi seri hale getirin

Örnek

public class Move { 
    public string MoveName {get; set;} 

    public List<Tag> oTags = new List<Tag>; 
} 

public class Tag { 
    public string TagName {get; set;} 
} 

ben hareket hareket saklanan tüm etiketler de tefrika alacak serialize olursa? Ayrıca eğer listeyi serileştirmeyecekse, bunu yapmak için nasıl giderim?

<Move> 
    <MoveName>name</MoveName> 
    <Tag>Value</Tag> 
    ... 
</Move> 
+0

Geçerli cevaplardan bağımsız olarak, _how_ seri hale getiriyor musunuz? Örneğin, 'XmlSerializer' kullanırsanız, çalışır. (istediğiniz belirli XML şeması çıktısını almak için bazı özel nitelikler veya yaratıcılık kullanmak zorunda kalabilirsiniz) –

+0

XmlSerializer kullanıyorum –

+1

Şema nasıl olur? Birçok etiketi nasıl ele aldığınızı biraz belirsiz görünüyor. adı1 Değeri Değer2 ... ValueN'? Ayrıca, 'Move' ve' Tag' sınıflarınızı değiştirerek esnek misiniz? –

cevap

9

Evet kullanarak t olarak bu kodu

XmlSerializer serializer = new XmlSerializer(typeof(YourClass)); 

deneyin olmalı XmlSerializerList<T>'u T (ya da sizin durumunuzda Tag) seri hale getirilebilecek şekilde serileştirecektir.

Move move = new Move { MoveName = "MyName" }; 
move.oTags.Add(new Tag { TagName = "Value1" }); 
move.oTags.Add(new Tag { TagName = "Value2" }); 
move.oTags.Add(new Tag { TagName = "Value3" }); 

StringBuilder output = new StringBuilder(); 
var writer = new StringWriter(output); 

XmlSerializer serializer = new XmlSerializer(typeof(Move)); 
serializer.Serialize(writer, move); 

Console.WriteLine(output.ToString()); 

Bu şekilde mevcut sınıf yapısı kullanılarak verir:

<?xml version="1.0" encoding="utf-16"?> 
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <oTags> 
    <Tag> 
     <TagName>Value1</TagName> 
    </Tag> 
    <Tag> 
     <TagName>Value2</TagName> 
    </Tag> 
    <Tag> 
     <TagName>Value3</TagName> 
    </Tag> 
    </oTags> 
    <MoveName>MyName</MoveName> 
</Move> 

Ben mevcut XML şemasını eşleştirmek için bir yol bulursam ben göreceksiniz, ancak XmlAttributes nasıl uygulanacağını bakmak ve onunla kendin oyna.


DÜZENLEME: Aşağıdaki XmlAttributes kullanmak için sınıf bildirimi değiştirirseniz

, kendi örnekte olduğu gibi tam XML şeması elde edecek:

public class Move 
{ 
    [XmlElement(Order = 1)] 
    public string MoveName {get; set;} 

    [XmlElement(Order = 2, ElementName = "Tags")] 
    public List<Tag> oTags = new List<Tag>(); 
} 

public class Tag 
{ 
    [XmlText] 
    public string TagName {get; set;} 
} 

Hangi tefrika üretecek zaman:

<?xml version="1.0" encoding="utf-16"?> 
<Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <MoveName>MyName</MoveName> 
    <Tags>Value1</Tags> 
    <Tags>Value2</Tags> 
    <Tags>Value3</Tags> 
</Move> 
+0

Şema bildiğim şeyle eşleşmiyor olsa da, dizileştirdiğim nesneyi listeden geçip geçmeyeceği sorusunu yanıtlıyor. . Brendan Hill'in gönderdiği bağlantı, bana istediğim düzen için nasıl ayarlanacağı konusunda oldukça iyi bir fikir veriyor. Teşekkür ederim. –

+0

@maxinfet: Düzenlememi/güncellememi kontrol et, şemanızla eşleşen bir çıktı üretecek bir dizi özellik buldum. –

+0

@maxinfet: Ayrıca, serileştirme kodumu biraz açtım, daha önce kopyalamış/yapıştırmış olsaydınız tekrar kontrol edebilirim. –

1

Listedeki öğeler seri hale getirilemeyeceğinden, varsayılan olarak, hayır olmaz.

olduklarını, o zaman aşağıdaki sayfa userful bulabilirsiniz: Eğer sınıf Beyannameler sizin Soru doğru olduğundan emin

XML Serialize generic list of serializable objects

3

musunuz? Sadece Public Move ilan edilir , O Public class Move

Sizin durumda

Move m = new Move(); 
      m.oTags.Add(new Tag() { TagName = "X" }); 
      m.oTags.Add(new Tag() { TagName = "XX" }); 

      XmlSerializer x = new XmlSerializer(typeof(Move)); 
      System.IO.Stream s; 

      var xmlwriter = System.Xml.XmlWriter.Create("C:\\MXL.txt"); 
      x.Serialize(xmlwriter, m); 

çıkış

<?xml version="1.0" encoding="utf-8"?> 
    <Move xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <oTags> 
<Tag> 
    <TagName>X</TagName> 
</Tag> 
<Tag> 
    <TagName>XX</TagName> 
</Tag> 
</oTags></Move> 
İlgili konular