c# - 如何?类对象的 XML 序列化

标签 c# xml serialization

我正在尝试序列化一个类对象并将 xml 存储在一个字符串中,但每次我收到异常消息“生成 xml 文档时出错”

我试图序列化的类对象属于类:

[XmlRoot("FlowOfTask")] 
public class Flow
{
    int _CurrHop = 0;

    [XmlElement("CurrentHop")]
    public int CurrentHop
    {
        get { return _CurrHop; }
        set { _CurrHop = value; }
    }

    int _TotalHops = 0;

    [XmlElement("TotalHops")]
    public int TotalHops
    {
        get { return _TotalHops; }
    }

    private List<tblTaskHop> _TaskHops;

    [System.Xml.Serialization.XmlArrayItemAttribute(ElementName = "Hop",
    IsNullable = false)]
    public List<tblTaskHop> TaskHops
    {
        get { return _TaskHops; }
    }
    public Flow()
    {

    }

    public Flow(Int64 TaskID, Int64 RoleID)
    {
        _TaskHops = HandleDB.tblTaskHopGetByTaskIDRoleID(TaskID, RoleID);
        _TotalHops = TaskHops.Count;
    }

}

我正在使用这个函数来序列化。

public static string SerializeAnObject(object item)
{

    try
    {
        string xmlText;

        //Get the type of the object
        Type objectType = item.GetType();

        //create serializer object based on the object type
        XmlSerializer xmlSerializer = new XmlSerializer(objectType);

        //Create a memory stream handle the data
        MemoryStream memoryStream = new MemoryStream();

        //Create an XML Text writer to serialize data to
        using (XmlTextWriter xmlTextWriter =
            new XmlTextWriter(memoryStream, Encoding.UTF8) { Formatting = Formatting.Indented })
        {

            //convert the object to xml data
            xmlSerializer.Serialize(xmlTextWriter, item);

            //Get reference to memory stream
            memoryStream = (MemoryStream)xmlTextWriter.BaseStream;

            //Convert memory byte array into xml text
            xmlText = new UTF8Encoding().GetString(memoryStream.ToArray());

            //clean up memory stream
            memoryStream.Dispose();
            return xmlText;
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
        return null;
    }
}

谁能帮我解释为什么我不能序列化这个类对象?

最佳答案

你的序列化方法应该是这样的:

public static string SerializeAnObject(Object item) {
    if (item == null)
        return null;

    var stringBuilder = new StringBuilder();
    var itemType = item.GetType();

    new XmlSerializer(itemType).Serialize(new StringWriter(stringBuilder), item);

    return stringBuilder.ToString();
}

上面的函数在我这样测试时有效:

var test = new Flow();
var xmlString = SerializeAnObject(test);

关于c# - 如何?类对象的 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127749/

相关文章:

c# - 了解 MEF System.Lazy<T,TMetaData>

c# - 如何正确发送PATCH请求

android - 由于背景图像,应用程序在 Nexus 4(4.4.4) 上崩溃

python - Django 主键序列化器 "This field may not be null"同时allow_null=True

c# - 中继器使用哪个事件来查找中继器内的控件

c# - "thread-safe type"到底是什么?我们什么时候需要使用 "lock"语句呢?

php - 如何使用 PHP dom 设置元素的 id?

c# - 如果命名空间也被定义为默认值,则强制 XDocument 不使用命名空间前缀

java - 以两种不同的方式序列化 jackson 场

iphone - 从 iOS 发布到 Rails 应用程序时序列化嵌套对象