【问题标题】:Parameterless constructor when using XmlSerializer [duplicate]使用 XmlSerializer 时的无参数构造函数 [重复]
【发布时间】:2017-04-21 12:30:46
【问题描述】:

我目前正在尝试复制(通过使用代码)一个 .xml 文件,并以许多不同的方式处理它。然而,这种方式似乎是我得到最多的方式,因为我以前有过它,但要创建一个 console.writeline 输出。在生成 .xml 布局时,我似乎无法让它为 console.out 工作。它给了我以下错误

“无法序列化,因为它没有无参数构造函数”

请任何人帮助我解决这个问题。

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

namespace ConsoleApplication1
{
class Program
{
    const string FILENAME = @"SmallResults.xml";
    static void Main(string[] args)
    {
        List<BasicEvent> NewBasicEvent = new List<BasicEvent>();
        XmlTextReader fileReader = new XmlTextReader("SmallResults.xml");
        XmlDocument xml = new XmlDocument();
        xml.Load(fileReader);
        XmlNodeList BasicEvents = xml.SelectNodes("/HiP-HOPS_Results/FaultTrees/FMEA/Component/Events/BasicEvent");
        if (BasicEvents != null)
        {
            XmlNode[] nodearray = BasicEvents.Cast<XmlNode>().ToArray();
            for (int i = 0; i < BasicEvents.Count; i++)
            {
                NewBasicEvent.Add(new BasicEvent(nodearray[i].FirstChild.NextSibling.InnerText, nodearray[i].FirstChild.NextSibling.NextSibling.InnerText, nodearray[i].FirstChild.NextSibling.NextSibling.InnerText, nodearray[i].FirstChild.NextSibling.NextSibling.NextSibling.InnerText));
                new XmlSerializer(typeof(BasicEvent)).Serialize(Console.Out, nodearray );
            }
        }


    }
}
public class FMEA
{
    public List<Component> components { get; set; }
}
public class Component
{
    public string CompName { get; set; }
    public string BasicEventID { get; set; }
    public List<BasicEvent> basicevents { get; set; }
}
public class Events
{
}
public class BasicEvent
{
    public string BasicEventName { get; set; }
    public string BasicEventShortName { get; set; }
    public string BasicEventDescription { get; set; }
    public string BasicEventUnavalability { get; set; }
    public List<Effects> effects { get; set; }

    public BasicEvent( string basiceventname, string basiceventshortname, string basiceventdescription, string basiceventunavalability )
    {
        BasicEventName = basiceventname;
        BasicEventShortName = basiceventshortname;
        BasicEventDescription = basiceventdescription;
        BasicEventUnavalability = basiceventdescription;
    }

【问题讨论】:

  • 正如错误所说,没有可用的默认无参数构造函数。反序列化需要它存在,以便可以创建对象,然后设置值。向班级添加一个。

标签: c# xml


【解决方案1】:

异常中的信息很清楚!

然后添加默认构造函数:

public BasicEvent( ){}

【讨论】:

    猜你喜欢
    • 2021-05-29
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多