SORU
14 Temmuz 2009, Salı


Neden'XML seri hale getirilebilir sözlükte bir t değil .NET?

XML seri hale getirilebilir bir sözlüğe ihtiyacım var. Aslında, ben şimdi tek gereken iki çok farklı programlar var. Bunu görmek oldukça şaşırdım .NET bir fikri yok. Soruyu başka yerlerde de sordum ve alaycı bir yanıt var. Aptalca bir soru olduğunu anlayamıyorum.

Birisi beni aydınlatmak, verilen nasıl bağımlı çeşitli olabilir .NET özellikleri XML seri hale getirilebilir bir sözlük yok neden XML seri hale getirme. Umarım, bazı insanlar bu aptalca bir soru düşünün açıklıyor. Temel bir şeyi kaçırıyor olmalıyım sanırım ve boşlukları doldurmak için mümkün olacak umuyorum.

CEVAP
9 Mayıs 2011, PAZARTESİ


Biliyorum bu oldu cevap önce, ama beri bir çok kısa yol (kod) için ne C seri ile DataContractSerializer sınıf (kullanılan XML, ama olabilir ve kullanılmalıdır her yerde) ben dayanamadım katkıda buraya:

public static class SerializationExtensions
{
    public static string Serialize<T>(this T obj)
    {
        var serializer = new DataContractSerializer(obj.GetType());
        using (var writer = new StringWriter())
        using (var stm = new XmlTextWriter(writer))
        {
            serializer.WriteObject(stm, obj);
            return writer.ToString();
        }
    }
    public static T Deserialize<T>(this string serialized)
    {
        var serializer = new DataContractSerializer(typeof(T));
        using (var reader = new StringReader(serialized))
        using (var stm = new XmlTextReader(reader))
        {
            return (T)serializer.ReadObject(stm);
        }
    }
}

Bu mükemmel bir şekilde çalışıyor .NET 4 ve de çalışması gerekir .NET henüz test etmedim, ancak 3.5,.

GÜNCELLEME:yokiş .DataContractSerializer NET Kompakt Çerçeve (hatta Windows için NETCF 3.7 Telefon 7) desteklenmiyor!

Yaptığım akarsu dize çünkü daha uygun bana rağmen bir şeyler yapabilir sunulan bir alt düzey serileştirme Akışı ve kullanılan seri hale getirmek dizeler, ama ben genelleme eğilimi yalnızca gerektiğinde (gibi erken optimizasyon kötü, o yüzden erken genelleme...)

Kullanımı çok basittir:

// dictionary to serialize to string
Dictionary<string, object> myDict = new Dictionary<string, object>();
// add items to the dictionary...
myDict.Add(...);
// serialization is straight-forward
string serialized = myDict.Serialize();
...
// deserialization is just as simple
Dictionary<string, object> myDictCopy = 
    serialized.Deserialize<Dictionary<string,object>>();

myDictCopy myDict birebir kopyası olacak.

Siz de dikkat edin genel yöntemler temin edebilir hale herhangi bir türü (bildiğim kadarıyla) beri bunlarla sınırlı değildir C arayüzleri, gerçekten herhangi bir genel tür T.

Umarım orada birileri yardımcı olur!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Machinima

    Machinima

    17 Ocak 2006
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • metal571

    metal571

    30 Mayıs 2006