SORU
29 NİSAN 2009, ÇARŞAMBA


Seri hale getirilirken özel üye veri

Salt okunur bazı özellikleri, bir numarası vardır XML nesne seri hale getirmek için çalışıyorum.

public Guid Id { get; private set; }

Sınıf [seri hale getirilebilir] işaretledim ve ISerializable arabirimi hayata geçirdik.

Aşağıda benim nesne seri hale getirmek için kullanıyorum kodu.

public void SaveMyObject(MyObject obj)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
    TextWriter tw = new StreamWriter(_location);
    serializer.Serialize(tw, obj);
    tw.Close();
}

Ne yazık ki bu mesaj ile ilk çizgi düşüyor.

Invalidoperationexception işlenmeyen: Geçici bir sınıf (=1 sonucu) oluşturulamadı. hata CS0200: Özellik veya dizin oluşturucu 'MyObject.Id' salt okunur -- atanacak

Eğer halka Id özelliği ayarlanırsa gayet iyi çalışıyor. Biri bana bir şey yapıyorum, ya da en azından mümkün olup olmadığını söyleyebilir?

CEVAP
29 NİSAN 2009, ÇARŞAMBA


DataContractSerializer (ama xml öznitelikleri kullanın - sadece xml öğeleri) edemezsin not: kullanabilirsiniz

using System;
using System.Runtime.Serialization;
using System.Xml;
[DataContract]
class MyObject {
    public MyObject(Guid id) { this.id = id; }
    [DataMember(Name="Id")]
    private Guid id;
    public Guid Id { get {return id;}}
}
static class Program {
    static void Main() {
        var ser = new DataContractSerializer(typeof(MyObject));
        var obj = new MyObject(Guid.NewGuid());
        using(XmlWriter xw = XmlWriter.Create(Console.Out)) {
            ser.WriteObject(xw, obj);
        }
    }
}

Alternatif olarak, IXmlSerializable uygulamak ve her şeyi kendiniz yapabilirsiniz - ama bu XmlSerializer, en azından çalışır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Hak5

    Hak5

    7 EYLÜL 2005
  • MuscleProdigyTV

    MuscleProdig

    8 Ocak 2011