2010-11-19 19 views
2

, eski kod yapısı aşağıdaki hangi xml oluşturur:Sorun Projemde

<Output> 
    <Template recordID=12> 
     <Employer type="String"> 
      <Value>Google</Value> 
      <Value>GigaSoft inc.</Value> 
     </Employer> 
     <Designation type="String"> 
      <Value>Google</Value> 
     </Designation> 
     <Duration type="String" /> 
    </Template> 
</Output> 

I (C# kullanıyorum ) özelliklerine aşağıdaki hangi nesnesine bu xml serisini istiyorum:

public class EmployerInfo 
{ 
    string[] _employerName; 
    string[] _designation; 
    string _duration; 
} 

Ben üyelerinin etrafında aşağıdaki özellikleri kullanarak xml yukarıda serisini çalıştı (nOT:. Bence veri üyeleri, kamu yapmamalı biliyorum ben kod basitleştirilmiş var Bu kod sadece deneysel amaçlıdır.)

[XmlElement("Template")] 
public class EmployerInfo 
{ 
    [XmlElement("Employer")] 
    public string[] _employerName; 

    [XmlElement("Designation")] 
    public string[] _designation; 

    [XmlElement("Duration")] 
    public string _duration; 
} 
ana sınıfında yazdım, seriyi kaldırmak için:

XmlSerializer serial = new XmlSerializer(typeof(Output)); 
TextReader reader = new StreamReader(@"C:\sample_xml.xml"); 
EmployerInfo fooBar = (EmployerInfo)serial.Deserialize(reader); 
reader.Close(); 

kodunun üzerinde yürüttükten sonra filanca nesnesindeki tüm üyeleri (varsayılan değerleri) sıfır olarak ayarlanır. Bunun nedeni xml yapısının sınıf yapısına uymamasıdır.

xsd komutunu kullanarak otomatik olarak sınıf oluşturmaya çalıştım ancak her veri üyesi için ayrı sınıflar oluşturdu.

XmlElement ("Employer.Value"), XmlElement ("Template.Employer.Value") gibi öğe adlarını vermeye çalıştım ancak bu da işe yaramadı.

Bu xml'yi EmployerInfo sınıfına sığdırmanın bir yolunu lütfen önerebilir misiniz? peşin

Teşekkür

cevap

1

Dene: Ayrıca XmlSerializer(typeof(Output)) 'ın serisi kaldırılmaya yönteminden dönen türü tat

using System.IO; 
using System.Xml.Serialization; 
[XmlType("Template")] 
public class EmployerInfo 
{ 
    [XmlArray("Employer"), XmlArrayItem("Value")] 
    public string[] _employerName; 

    [XmlArray("Designation"), XmlArrayItem("Value")] 
    public string[] _designation; 

    [XmlElement("Duration")] 
    public string _duration; 
} 
public class Output 
{ 
    public EmployerInfo Template { get; set; } 
} 
static class Program 
{ 
    static void Main() 
    { 
     XmlSerializer serial = new XmlSerializer(typeof(Output)); 
     using (var reader = new StringReader(@"<Output> 
    <Template recordID=""12""> 
     <Employer type=""String""> 
      <Value>Google</Value> 
      <Value>GigaSoft inc.</Value> 
     </Employer> 
     <Designation type=""String""> 
      <Value>Google</Value> 
     </Designation> 
     <Duration type=""String"" /> 
    </Template> 
</Output>")) 
     { 
      EmployerInfo fooBar = ((Output)serial.Deserialize(reader)).Template; 
     } 
    } 
} 

Note Output rekor olacak.

+0

Ortak sınıf EmployerInfo satırının üstünde XmlRoot() özniteliğini belirtmemiz gerekiyor mu? – Shekhar

+0

@Shekhar - Örnek çalışmayı tamamen güncelledim –