C# XML序列化格式需要非常具体,如何序列化与父类同名的子类?

C# XML序列化格式需要非常具体,如何序列化与父类同名的子类?,c#,xml,serialization,C#,Xml,Serialization,我对编程相当陌生,需要弄清楚如何序列化对象,使XML文件具有如下所示的格式 成员1d 1. 内在力量 绝对的 0 装载箱 1. 1. 242.96484375 0 1176.9375 0 -727.5482177734375 0 装载箱 2. 1. 20200.224609375 0 97851.2109375 0 -60488.7421875 0 我现在有类似的东西,但很明显,所有节点都将是OpenModelResult父节点的子节点。有人能给我指出正确的方向吗 公共类OpenModelR

我对编程相当陌生,需要弄清楚如何序列化对象,使XML文件具有如下所示的格式


成员1d
1.
内在力量
绝对的
0
装载箱
1.
1.
242.96484375
0
1176.9375
0
-727.5482177734375
0
装载箱
2.
1.
20200.224609375
0
97851.2109375
0
-60488.7421875
0
我现在有类似的东西,但很明显,所有节点都将是OpenModelResult父节点的子节点。有人能给我指出正确的方向吗

公共类OpenModelResult
{
公共字符串ResultonMembers{get;set;}
公共字符串成员{get;set;}
公共字符串ResultonMember{get;set;}
公共字符串成员{get;set;}
公共字符串成员类型{get;set;}
公共字符串Id{get;set;}
公共字符串结果{get;set;}
公共字符串ResultBase{get;set;}
公共字符串绝对相对{get;set;}
公共字符串位置{get;set;}
公共字符串部分ResultBase{get;set;}
公共字符串加载{get;set;}
公共字符串加载类型{get;set;}
公共字符串项{get;set;}
公共字符串ResultOfLoadingItem{get;set;}
公共字符串系数{get;set;}
公共双N{get;set;}
公共双Qy{get;set;}
公共双Qz{get;set;}
公共双Mx{get;set;}
公共双精度My{get;set;}
公共双Mz{get;set;}
公共作废保存(字符串文件名)
{
使用(var stream=newfilestream(文件名,FileMode.Create))
{
XmlSerializer XML=新的XmlSerializer(typeof(OpenModelResult));
序列化(流,this);
}
}
}

以下是使用Xml Linq的代码的开头。您已经在单个类中得到了结果,我认为XMLLINQ比xml序列化更好

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


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            OpenModelResult result = new OpenModelResult();
            OpenModelResult.results.Add(new OpenModelResult());  // added to test code
            result.Save(FILENAME);
        }

    }
    public class OpenModelResult
    {
        public static List<OpenModelResult> results = new List<OpenModelResult>();
        public string ResultonMembers { get; set; }
        public string Members { get; set; }
        public string ResultonMember { get; set; }
        public string Member { get; set; }
        public string MemberType { get; set; }
        public string Id { get; set; }
        public string Results { get; set; }
        public string ResultBase { get; set; }
        public string AbsoluteRelative { get; set; }
        public string Position { get; set; }
        public string SectionResultBase { get; set; }
        public string Loading { get; set; }
        public string LoadingType { get; set; }
        public string Items { get; set; }
        public string ResultOfLoadingItem { get; set; }
        public string Coefficient { get; set; }
        public double N { get; set; }
        public double Qy { get; set; }
        public double Qz { get; set; }
        public double Mx { get; set; }
        public double My { get; set; }
        public double Mz { get; set; }

        public void Save(string fileName)
        {
            string ident = 
                "<?xml version=\"1.0\" encoding=\"utf-16\"?>" + 
                "<OpenModelResult" + 
                   " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + 
                   " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
                "</OpenModelResult>";

            XDocument doc = XDocument.Parse(ident);
            XElement xOpenModelResult = doc.Root;
            XNamespace nsXsi = xOpenModelResult.GetNamespaceOfPrefix("xsi");

            XElement xResultOnMembers = new XElement("ResultOnMembers");
            xOpenModelResult.Add(xResultOnMembers);

            XElement xMembers = new XElement("Members");
            xResultOnMembers.Add(xMembers);

            foreach (OpenModelResult result in results)
            {
                XElement xResultOnMember = new XElement("ResultOnMember");
                xMembers.Add(xResultOnMember);

                XElement xMember = new XElement("Member", new object[] {
                    new XElement("MemberType",result.MemberType),
                    new XElement("Id",result.Id),
                });
                xResultOnMember.Add(xMember);

                xResultOnMember.Add(new XElement("ResultType", "InternalForces"));

                XElement xResults = new XElement("Results");
                xResultOnMember.Add(xResults);

                XElement xResultBase = new XElement("ResultBase", new XAttribute(nsXsi + "type", "ResultOnSection"));
                xResults.Add(xResultBase);
 


            }
            doc.Save(fileName);


        }
    }
 
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
OpenModelResult结果=新建OpenModelResult();
OpenModelResult.results.Add(新的OpenModelResult());//添加到测试代码中
结果.保存(文件名);
}
}
公共类OpenModelResult
{
公共静态列表结果=新列表();
公共字符串ResultonMembers{get;set;}
公共字符串成员{get;set;}
公共字符串ResultonMember{get;set;}
公共字符串成员{get;set;}
公共字符串成员类型{get;set;}
公共字符串Id{get;set;}
公共字符串结果{get;set;}
公共字符串ResultBase{get;set;}
公共字符串绝对相对{get;set;}
公共字符串位置{get;set;}
公共字符串部分ResultBase{get;set;}
公共字符串加载{get;set;}
公共字符串加载类型{get;set;}
公共字符串项{get;set;}
公共字符串ResultOfLoadingItem{get;set;}
公共字符串系数{get;set;}
公共双N{get;set;}
公共双Qy{get;set;}
公共双Qz{get;set;}
公共双Mx{get;set;}
公共双精度My{get;set;}
公共双Mz{get;set;}
公共作废保存(字符串文件名)
{
字符串标识符=
"" + 
"" +
"";
XDocument doc=XDocument.Parse(ident);
XElement xOpenModelResult=doc.Root;
XNamespace nsXsi=xOpenModelResult.GetNamespaceOfPrefix(“xsi”);
XElement xResultOnMembers=新XElement(“ResultOnMembers”);
xOpenModelResult.Add(xResultOnMembers);
XElement xMembers=新XElement(“成员”);
xResultOnMembers.Add(xMembers);
foreach(OpenModelResult结果生成结果)
{
XElement xResultOnMember=新XElement(“ResultOnMember”);
xMembers.Add(xResultOnMember);
XElement xMember=新XElement(“成员”,新对象[]{
新的XElement(“MemberType”,result.MemberType),
新的XElement(“Id”,result.Id),
});
xResultOnMember.Add(xMember);
添加(新的XElement(“ResultType”、“InternalForces”);
XElement xResults=新XElement(“结果”);
xResultOnMember.Add(xResults);
XElement xResultBase=新XElement(“ResultBase”,新XAttribute(nsXsi+“type”,“ResultSection”);
xResults.Add(xResultBase);
}
文件保存(文件名);
}
}
}

当前类将生成一个包含1个父类和其余子类的xml文件。如果要获得示例结构,需要定义