SORU
12 Mart 2010, Cuma


Dize seri hale getirmek için nesne

Bir dosya için bir Nesne kaydetmek için aşağıdaki yöntemi var:

// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    TextWriter textWriter = new StreamWriter(filename);

    xmlSerializer.Serialize(textWriter, toSerialize);
    textWriter.Close();
}

(Ben sadece tür bir parametre aldığını uzantısı bir yönteme dönüştürülmüş) yazdım İTİRAF EDİYORUM.

Şimdi xml bana bir dize yerine bir dosyaya kaydedin) olarak vermek istiyorum. İçine arıyorum, ama henüz tam karar vermedim.

Bu kimse bu nesneleri aşina için çok kolay olacağını düşünmüştüm. Bunu er geç fark edecektir.

CEVAP
12 Mart 2010, Cuma


StreamWriter yerine: StringWriter kullanın

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());

    using(StringWriter textWriter = new StringWriter())
    {
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}

Not önemlidir toSerialize.GetType() yerine typeof(T) XmlSerializer kurucu: eğer kullandığınız bir kod Kapakları Tüm Olası alt T (hangileri için geçerli bir yöntem), kullanırken ikinci bir başarısız geçen bir tür türetilmiş T. Burada bir bağlantı ile bazı örnek kod motive bu deyimi ile XmlSerializer atma Exception typeof(T) kullanılır, çünkü pass bir örnek, türetilmiş bir tür için bir yöntem çağrıları SerializeObject bu tanımlanan türetilmiş bir tür temel sınıf: http://ideone.com/1Z5J1.

Ayrıca, İdeone Mono kod; Exception gerçek Microsoft kullanarak elde yürütmek için kullanır .NET çalışma zamanı bir İdeone üzerinde gösterilenden Message bir farklı var, ama yine de başarısız.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • IGN

    IGN

    19 EYLÜL 2006
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010