SORU
15 ŞUBAT 2011, Salı


DataContractSerializer seri hale getirmek için kullanıyor, ama't serisini geri alabilir

Aşağıdaki 2 işlevleri var:

public static string Serialize(object obj)
{
    DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
    MemoryStream memoryStream = new MemoryStream();
    serializer.WriteObject(memoryStream, obj);
    return Encoding.UTF8.GetString(memoryStream.GetBuffer());
}

public static object Deserialize(string xml, Type toType)
{
    MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
   // memoryStream.Position = 0L;
    XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null);
    DataContractSerializer dataContractSerializer = new DataContractSerializer(toType);
    return dataContractSerializer.ReadObject(reader);
}

İlk xml bir dize iyi bir nesne seri hale getirmek gibi görünüyor. XML geçerli, kırık etiketleri, sonunda başında veya beyaz boşluk, vb görünür. Şimdi ikinci işlevi xml benim dize nesne geri serisini istemiyor. Son satırında alıyorum:

Bir hata kaldırmada vardı [NESNE BENİM YAZIN BURADA] nesne. Kök düzeyindeki veriler geçersiz. 1, pozisyon 1 satır.

Neyi yanlış yapıyorum? Serisini işlevi birkaç kez yeniden denedim ve hep hata aynı tür gibi görünüyor. Teşekkür ederim!

Oh, ve bu 2 işlevleri arıyorum nasıl:

SomeObject so = new SomeObject();
string temp = SerializationManager.Serialize(so);
so = (SomeObject)SerializationManager.Deserialize(temp, typeof(SomeObject));

CEVAP
15 ŞUBAT 2011, Salı


Ben bunu her zaman yapardım.

    public static string Serialize(object obj) {
        using(MemoryStream memoryStream = new MemoryStream())
        using(StreamReader reader = new StreamReader(memoryStream)) {
            DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
            serializer.WriteObject(memoryStream, obj);
            memoryStream.Position = 0;
            return reader.ReadToEnd();
        }
    }

    public static object Deserialize(string xml, Type toType) {
        using(Stream stream = new MemoryStream()) {
            byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
            stream.Write(data, 0, data.Length);
            stream.Position = 0;
            DataContractSerializer deserializer = new DataContractSerializer(toType);
            return deserializer.ReadObject(stream);
        }
    }

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsipek

    gsipek

    20 Temmuz 2007
  • thewinekone

    thewinekone

    17 Aralık 2005
  • Vortez

    Vortez

    27 Temmuz 2009