首页 > 解决方案 > 如何反序列化具有字典作为成员的自定义对象?

问题描述

我需要反序列化具有 2 个字段作为字符串和一个字典的对象,我尝试转换但它抛出错误为“ Cannot serialize member MVVMDemo.Model.Student.books of type System.Collections.Generic.Dictionary”当没有字典项但当我添加该字典项时它无法转换时它是可行的。从下一行抛出错误

XmlSerializer serializer = new XmlSerializer(typeof(Student));

这是我的课

public class Student
    {
        private string firstName;
        private string lastName;
        public Dictionary<string, string> books;

        public Dictionary<string, string> Books
        {
            get{return books;}
            set{books = value;}
        }
        public string FirstName
        {
            get{return firstName;}
            set
            {
                if (firstName != value)
                {
                    firstName = value;
                }
            }
        }

        public string LastName
        {
            get { return lastName; }
            set
            {
                if (lastName != value)
                {
                    lastName = value;
                }
            }
        }
    }

标签: c#xml-serialization

解决方案


您可以使用Newtonsoft.Json库解决此问题。要序列化首先将您的对象转换为 json,然后使用DeserializeXNode方法:

var student = new Student()
{
    FirstName = "FirstName",
    LastName = "LastName",
    Books = new Dictionary<string, string>
    {
        { "abc", "42" },
    }
};

var json = JsonConvert.SerializeObject(student);
var xml = JsonConvert.DeserializeXNode(json, "Root");
var result = xml.ToString(SaveOptions.None);
// result is "<Root><books><abc>42</abc></books><Books><abc>42</abc></Books><FirstName>FirstName</FirstName><LastName>LastName</LastName></Root>"

要反序列化,您可以使用SerializeXmlNode方法:

var input = "<Root><books><abc>42</abc></books><Books><abc>42</abc></Books><FirstName>FirstName</FirstName><LastName>LastName</LastName></Root>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(input);
var json = JsonConvert.SerializeXmlNode(doc);
var template = new {Root = (Student) null};
var result = JsonConvert.DeserializeAnonymousType(json, template);
// result.Root is an instance of Student class

推荐阅读