2013-11-27 34 views
0

我有以下類;XmlNodeConverter僅支持使用Json DeserializeObject時反序列化XmlDocuments錯誤

public class MyClass 
{ 
    [XmlIgnore] 
    public string Name { get; set; } 
    [XmlElement("Name")] 
    public XmlCDataSection sName 
    { 
     get { return new XmlDocument().CreateCDataSection(Name); } 
     set { Name = value.Value; } 
    } 
} 

我有下面的函數取一個列表<>並複製它的內容;

private static T CloneList<T>(T source) 
{ 
    var serialized = JsonConvert.SerializeObject(source); 
    return JsonConvert.DeserializeObject<T>(serialized); 
} 

但在我的代碼中,當我嘗試;

List<MyClass> oMyClassList = new List<MyClass>(); 

    MyClass oMyClass = new MyClass(); 
    oMyClass.Name = "Hello World's"; 

    oMyClassList.Add(oMyClass); 

    List<MyClass> oMyClonedClassList = new List<MyClass>(CloneList(oMyClassList)); 

在執行點以下

List<MyClass> oMyClonedClassList = new List<MyClass>(CloneList(oMyClassList)); 

我得到的錯誤XmlNodeConverter only supports deserializing XmlDocuments。問題發生是因爲我已將XmlCDataSection添加到類中。

我該如何解決這個問題?

回答

0

我設法改變我的CloneList代碼以下

public static T DeepClone<T>(T obj) 
{ 
    T objResult; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     bf.Serialize(ms, obj); 
     ms.Position = 0; 
     objResult = (T)bf.Deserialize(ms); 
    } 
    return objResult; 
} 

克服這個問題正如[阿吉特]提供[1]這裏How do I clone a generic list in C#?

[1]:https://stackoverflow.com/users/853645/ajith 「阿吉特」。

而且,每一個需要被克隆的類,我不得不在每個類的頂部添加[Serializable]因爲我得到異常「未標記爲可序列化」