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

  • Branboy3

    Branboy3

    12 AĞUSTOS 2012
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009