2010-11-11 30 views
7

'Name' adında bir string özelliğine sahip bir özel nesnem var. Serileştirme tarafından oluşturulan XML'yi aynı tutmak istiyorum ancak bir değerle 'NiceName' adlı öğeye bir özellik ekleyin 'Tam adın'. Ben sadece bu yüzden değiştirmek istemediğiniz bazı XSLT için buna ihtiyacınDize özelliğine Xml Özniteliği ekle

<TheObject> 
    <Name NiceName='Full name'>mr nobody</Name> 
</TheObject> 

: Bu i oluşturmak istiyorum ne

<TheObject> 
    <Name>mr nobody</Name> 
</TheObject> 

:

Bu

ı şu anda ne var sınıfın mümkün olduğunca çalışır. I.E. Dizeden adı özel bir sınıfa geçmek. Tüm nesneler asla değiştirmeyecek aynı niteliğe sahip olacak, sadece tamamen okunacaktır.

cevap

4

aşağıdaki gibi başka bir tür tanımlarsanız mümkündür:

public class Person 
{ 

    private string _name; 


    [XmlIgnore] 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      ThePersonName = new PersonName() 
           { 
            Name = FullName, 
            NiceName = _name 
           }; 
     } 
    } 

    [XmlElement(ElementName = "Name")] 
    public PersonName ThePersonName { get; set; } 

    public string FullName { get; set; } 

} 

public class PersonName 
{ 
    [XmlAttribute] 
    public string NiceName { get; set; } 

    [XmlText] 
    public string Name { get; set; } 
} 

 XmlSerializer s = new XmlSerializer(typeof(Person)); 
     Person ali = new Person(); 
     ali.FullName = "Ali Kheyrollahi"; 
     ali.Name = "Nobody"; 
     s.Serialize(new FileStream("ali.xml",FileMode.Create), ali); 

<?xml version="1.0"?> 
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Name NiceName="Nobody">Ali Kheyrollahi</Name> 
    <FullName>Ali Kheyrollahi</FullName> 
</Person> 
+0

Teşekkür olacak kişi adı. Bunu xslt dosyasına yazmayı daha iyi biliyorum, sadece onu xslt yerine .net'den yönetmek istiyorum. Demek istediğim, Bay Joe Blogs gibi bir şey üretmem gerekiyor. Daha sonra Xslt'de her öğe için nicename ve daha güzel bir kullanıcı arabirimi üretmek için değer çıktı. "FullName = Joe Blogs" yerine "Full Name = Mr Joe Blogs" veya bir alternatif "TEL nicename =" telefon "> 1234 – Jammy

+0

Bir kardeşi level özelliğini başka bir mülke nasıl uygulayacağımı anlayamıyorum bağlıyor. Bence Aliostad'ın cevabı biraz “dağınık” gibi görünüyor ama sanırım gitmenin yolu bu. – hunter

+0

Bunu xslt, srsly'de yapmaktan daha iyidir. 'XmlSerializer' bu tarz bir çakışma ile baş edemiyor. –

7

Sen XmlAttribute ve xmlText bir bileşimini kullanabilirsiniz üretecek Kullanma()

sınıf tanımlamasının örnek aşağıda atın: Ancak ne ben yapmaya çalışıyorum kod düğüm adı için bir alternatif değildir

public class Description { 
    private int attribute_id; 
    private string element_text; 

    [XmlAttribute("id")] 
    public int Id { 
     get { return attribute_id; } 
     set { attribute_id = value; } 
    } 

    [XmlText()] 
    public string Text { 
     get { return element_text; } 
     set { element_text = value; } 
    } 
} 

çıkış cevapları için

<XmlDocRoot> 
<Description id="1">text</Description> 

İlgili konular