2010-03-23 19 views
11

Bir XmlText özniteliği olan Name adında bir özelliğe sahip bir temel sınıfım var.Temel sınıftaki XmlText özniteliği serileştirme serisini

Kalıtsal sınıf Dediğim istisna almak tefrika edildiğinde:

'[tür adı]' türü yansıtan bir hata oluştu. ---> System.InvalidOperationException: '[type name]' türünde nesne serialize edilemiyor. Taban türü '[base type name]' , simpleContent'e sahiptir ve yalnızca öğesi, XmlAttribute öğelerini ekleyerek genişletilebilir. Lütfen temel sınıfın XmlText üyesini dizi dizisine değiştirmeyi düşünün.

Sınıf tanımlarım, xml'ye serileştirilirken hata oluşuyor.

[Serializable] 
public class LookupItem 
{ 
    [System.Xml.Serialization.XmlAttribute()] 
    public int ID { get; set; } 

    [System.Xml.Serialization.XmlText()] 
    public string Name { get; set; } 
} 

[Serializable] 
public class Vendor : LookupItem 
{ 
    public string ContactNumber { get; set; } 
} 

[Serializable] 
public class Vendors : List<Vendor> 
{ 

} 

cevap

15

LookupItem sınıfının XML temsilinde alt öğe bulunmadığından gerçekleşmiş gibi görünüyor. Bu nedenle, XmlSerializer, bir simpleContent XML öğesi olarak kabul eder. Bir XML öğesi olarak serileştirilecek olan LookupItem'a yeni bir özellik eklerseniz, iyi çalışır.

Yani yapabileceğini düşünüyorum ...

Sadece seri niteliklerini mevcut XML bakarak birkaç dakika geçirdi ama tip bir simpleContent eleman DEĞİL olduğunu belirtmek için izin verecek olan herhangi bulamadık LookupItem sınıfında asla kullanmadığınız bir dummy özellik veya alan ekleyerek çalışmasını sağlayın. Buna hiçbir zaman bir değer atamazsanız, boş kalır ve serileştirilmez, ancak sınıfınızın simpleContent olarak değerlendirilmesini engeller. (Serializable nitelik XML seri için gerekli olmadığını unutmayın, BTW.)

public class LookupItem 
{ 
    [System.Xml.Serialization.XmlAttribute()] 
    public int ID { get; set; } 

    [System.Xml.Serialization.XmlText()] 
    public string Name { get; set; } 

    public object _dummy; 
} 

... Ben kirli bir çözüm olduğunu biliyorum, ama başka kolay yolu bakın

Neyse, gerçekten ihtiyacım var Name XML metin olarak serileştirmek için? Bu oldukça nadirdir, genellikle XML öğeleri basit içerik (metin) veya alt öğeler içeriyor ... Her ikisinin bir karışımı XML'in okunmasını zorlaştırır, bu yüzden bunu yapmak zorunda kalmazsanız, Name'u bir öznitelik olarak serileştirmenizi öneririm veya alt öğe.