简体   繁体   English

C#序列化为XML

[英]C# Serialize to XML

I have a class LogModel that contains a list of Logparameters. 我有一个LogModel类,其中包含Logparameters列表。 I want to serialize this to XML. 我想将此序列化为XML。 My problem is that only the LogModel class is serialized and that the list of parameters is not added to the XML. 我的问题是,只有LogModel类序列化和参数列表不会被添加到XML。

public class LogModel
{
    [XmlText]
    public String Message { get; set; }
    [XmlAttribute]
    public DateTime LogDate { get; set; }
    [XmlAttribute]
    public Int32 Level { get; set; }
    [XmlAttribute]
    public String Type { get; set; }
    public String Source { get; set; }
    public DateTime StartDateTime { get; set; }
    public DateTime EndDateTime { get; set; }
    public String Owner { get; set; }

    [XmlArray("Parameters")]
    public List<LogModelParameter> Parameters { get; set; }
}

public class LogModelParameter
{
    [XmlAttribute]
    public DateTime ParameterDate { get; set; }
    [XmlAttribute]
    public Int32 Level { get; set; }
    [XmlAttribute]
    public Int32 Counter { get; set; }
    [XmlAttribute]
    public String Type { get; set; }
    [XmlText]
    public String Text { get; set; }
}

The code for serializing is the following 序列化的代码如下

XmlSerializer serializer = new XmlSerializer(typeof(List<LogModel>));
TextWriter writer  = new StreamWriter("log.xml");
serializer.Serialize(writer, logModels);

What can be wrong? 有什么事吗

Kind regards Dipke 亲切的问候

change your serialization method 更改序列化方法

 var optimizedtype = new XmlSerializer(logModels.GetType());
        using (var Writer = new StreamWriter("log.xml", false))
        {
            optimizedtype.Serialize(Writer, logModels);
        }   

Change From : typeof(List) To : typeof(LogModel) 改变从子:typeof(列表):typeof运算(LogModel)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            LogModel logModels = new LogModel()
            {
                Message = "Hello",
                LogDate = DateTime.Now,
                Level = 123,
                Type = "Red",
                Source = "Web",
                StartDateTime = DateTime.Now.AddHours(-1),
                EndDateTime = DateTime.Now.AddHours(2),
                Owner = "Me",
                Parameters = new List<LogModelParameter>() {
                    new LogModelParameter() {
                        ParameterDate = DateTime.Now,
                        Level = 5,
                        Counter = -1,
                        Type = "Banana",
                        Text = "Hello"
                    },
                    new LogModelParameter() {
                        ParameterDate = DateTime.Now.AddHours(1),
                        Level = 4,
                        Counter = 0,
                        Type = "Peach",
                        Text = "Goodbye"
                    }
                }
            };

            XmlSerializer serializer = new XmlSerializer(typeof(LogModel));
            TextWriter writer = new StreamWriter("log.xml");
            serializer.Serialize(writer, logModels);

        }
    }
    public class LogModel
    {
        [XmlText]
        public String Message { get; set; }
        [XmlAttribute]
        public DateTime LogDate { get; set; }
        [XmlAttribute]
        public Int32 Level { get; set; }
        [XmlAttribute]
        public String Type { get; set; }
        public String Source { get; set; }
        public DateTime StartDateTime { get; set; }
        public DateTime EndDateTime { get; set; }
        public String Owner { get; set; }

        [XmlElement("Parameters")]
        public List<LogModelParameter> Parameters { get; set; }
    }

    public class LogModelParameter
    {
        [XmlAttribute]
        public DateTime ParameterDate { get; set; }
        [XmlAttribute]
        public Int32 Level { get; set; }
        [XmlAttribute]
        public Int32 Counter { get; set; }
        [XmlAttribute]
        public String Type { get; set; }
        [XmlText]
        public String Text { get; set; }
    }

}
​

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM