2011-04-14 202 views
1

我在看看XML序列化,並序列化爲這樣:C#XML序列化/反序列化

public static string Serialize<T>(T data) 
{ 
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
    //Overridden to use UTF8 for compatability with Perl XML::DOM 
    StringWriterUTF8 sw = new StringWriterUTF8(); 
    xmlSerializer.Serialize(sw, data); 
    return sw.ToString(); 
} 

我用它作爲這樣的:

string serializedData = Serializer.Serialize<List<InputData>>(rawDataCollection); 

主要生產:

<ArrayOfInputData xmlns:xsi="http://www.w3.org/2001/XMLSchema-    instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <InputData> 
     <dose>100mg/kg</dose> 
     <compound>AZ13279746-001</compound> 
    </InputData> 
</ArrayOfInputData> 

出於某種原因,我不能包含xml版本1.0編碼UTF8的頭文件。

現在,當我嘗試用

public static object DeSerialize<T>(string data) 
{ 
    StringReader rdr = new StringReader(data); 
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
    T i; 
    i = (T)xmlSerializer.Deserialize(rdr); 

    return i; 
} 

反序列化,我得到一個錯誤在2,2說無效的XML。任何想法我做錯了什麼?

感謝

+0

我覺得毫克/公斤失敗..我只是缺少knowlage正確解釋。但我認爲/正在被視爲一種「逃避」 - 某種東西被稱爲... ggah我應該閉嘴並停止讓自己變傻:P – 2011-04-14 09:56:20

+0

@Levisaxos - 哈.....我不認爲就是因爲它在2,2中表示無效,如果你還包含標題行,它將是中的A.我認爲這是因爲它預計可能在那裏?我也不確定,因此爲什麼我把它拋到了精彩的人們身上:) – 2011-04-14 10:03:58

回答

2

不知道,如果它是一個錯字,或在輸出真正的錯誤,但你必須在你的XML錯誤的空間。

< /ArrayOfInputData> 
+0

這是一種類型。已修復。 – 2011-04-14 09:51:10

+0

由於沒有進一步的答案即將就此(見我的答案),那麼我已經接受你的。明智地付出:) – 2011-04-14 10:30:26

+0

@達倫:謝謝,這非常慷慨。 – 2011-04-14 14:13:18

3

現在有固定的:

public static object DeSerialize<T>(string data) 
    { 

     StringReader rdr = new StringReader(data); 

     XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 


     var result = (T)xmlSerializer.Deserialize(rdr); 


     return result; 



    } 

var fl = (List<InputData>)Serializer.DeSerialize<List<InputData>>(serializedData); 
+1

你可以返回T,而不是對象 - 在未來會爲你節省一些鑄件。 – Travis 2013-12-14 22:43:06