【问题标题】:XmlNodeConverter only supports deserializing XmlDocuments error when using Json DeserializeObjectXmlNodeConverter 仅支持使用 Json DeserializeObject 时反序列化 XmlDocuments 错误
【发布时间】:2013-11-27 17:46:42
【问题描述】:

我有以下课程;

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。

我怎样才能解决这个问题?

【问题讨论】:

    标签: c# json object serialization


    【解决方案1】:

    我设法通过将我的 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;
    }
    

    由 [Ajith][1] 提供How do I clone a generic list in C#?

    [1]:https://stackoverflow.com/users/853645/ajith“ajith”。

    此外,对于每个需要克隆的类,我必须在每个类的顶部添加 [Serializable],因为我收到异常“未标记为可序列化”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 2022-07-12
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 2018-07-28
      相关资源
      最近更新 更多