2010-06-03 6 views
1

Je suis à la recherche d'une solution de pâte pour la création de xml à travers la sérialisation xml. Ce que je dois, j'ai un format donné comme celui-ciProblème de création XML en utilisant C#

<product Id="1"> 
    <name>2 1/2 X 6 PVC NIPPLE TOE SCH 80</name> 
    <notes> 
    <note>!--note 1---</note> 
    <note>!--note 2--</note> 

    ...... 
    </notes> 

</product> 

ce que je fais ici, je créé un 2 classes comme celui-ci

public class product 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlArray("notes")] 
    public List<notes> ListNotes { get; set; } 
} 

public class notes 
{ 
    [XmlIgnore] 
    public string Note { get; set; } 
    } 

quand je suis sérialisation cela, alors je reçois xml dans ce formate

<product Id="1"> 
     <name>2 1/2 X 6 PVC NIPPLE TOE SCH 80</name> 
     <notes> 
     <notes> 
     <note>!--note 1---</note> 
     <note>!--note 2--</note> 
     </notes> 
     </notes> 
    </product> 

je ne veux pas supplémentaire <notes>. Toute solution de pâte pour résoudre ce problème? Merci


Solution

public class product 
    { 
     [XmlElement("name")] 
     public string Name { get; set; } 

     [XmlArray("notes")] 
     public List<notes> ListNotes { get; set; } 
    } 

    public class notes 
    { 
     [XmlText] 
     public string Note { get; set; } 
     } 




product ObjProduct = new product 
    { 
    Name ="Pankaj", 
    notes=new List<note>() 
    } 

foreach (var note in item.ListNote) 
    { 
    ObjProduct.notes.Add(new Highmark.BLL.Common.note { Note = EncodeTo64(note.Note) }); 
    } 

utilisent maintenant ce ObjProduct pour la sérialisation.

+0

Merci Gentleman, je suis la solution. – Pankaj

Répondre

2

Essayez comme ceci:

[XmlRoot("product")] 
public class Product 
{ 
    [XmlAttribute] 
    public int Id { get; set; } 

    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlElement("note")] 
    public List<Note> ListNotes { get; set; } 
} 

public class Note 
{ 
    [XmlText] 
    public string Text { get; set; } 
} 

class Program 
{ 
    public static void Main() 
    { 
     var p = new Product 
     { 
      Id = 1, 
      Name = "2 1/2 X 6 PVC NIPPLE TOE SCH 80", 
      ListNotes = new List<Note> 
      { 
       new Note { Text = "!--note 1---" }, 
       new Note { Text = "!--note 2---" }, 
      } 
     }; 
     var serializer = new XmlSerializer(p.GetType()); 
     serializer.Serialize(Console.Out, p); 
    } 
} 

Et si vous voulez supprimer l'espace de noms à partir du nœud racine:

var ns = new XmlSerializerNamespaces(); 
ns.Add("", ""); 
serializer.Serialize(Console.Out, p, ns); 
+1

désolé @@ Darin .. ce fait comme ZmVqaHQ = - c2RmZ2E = Pankaj

+1

@Pankaj, s'il vous plaît voir ma mise à jour. –

+0

Merci @@ Darin ... cette solution m'aider à résoudre mon problème – Pankaj

0

Cela ne répond pas directement à votre question, mais si vous ne pouvez pas résoudre ce problème, vous pouvez créer un fichier Schema.xsd et utiliser l'outil XSD de .NET pour générer les classes de sérialisation appropriées pour vous.

J'ai eu pas mal de succès avec ça.

L'avantage évident de l'utilisation d'un schéma est la validation sur XML, avant la sérialisation.

1

Essayez comme ceci:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var product = new Product() { Name = "PVC SCHOOL" }; 
     product.Notes = new List<note>(); 
     product.Notes.Add(new note() { Note = "A" }); 
     product.Notes.Add(new note() { Note = "B" }); 

     var serialer = new XmlSerializer(typeof(Product)); 
     using (var stream = new StreamWriter("test.txt")) 
     { 
      serialer.Serialize(stream, product); 
     } 
    } 
} 


public class Product 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlArray("notes")] 
    public List<note> Notes { get; set; } 
} 

public class note 
{ 
    [XmlIgnore] 
    public string Note { get; set; } 
} 
+0

Merci @@ Soe .. mais ceci est en ignorant les données de note et en montrant le résultat comme ceci Pankaj