C# XML序列化格式需要非常具体,如何序列化与父类同名的子类?
我对编程相当陌生,需要弄清楚如何序列化对象,使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
成员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文件。如果要获得示例结构,需要定义