2011-04-14 125 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