从类中自定义C#XML/XSD
本文关键字:XSD C#XML 自定义 | 更新日期: 2023-09-27 18:00:39
我正试图从我定义的类中获取xml。这是我的课
public class MyClass
{
public string Name { get; set; }
public MyAttribute[] Elements { get; set; }
}
public class MyAttribute
{
public string Name { get; set; }
public object Value { get; set; }
public string Type { get; private set; }
}
MyClass myClass = new MyClass();
myClass.Name = "Class1";
myClass.Elements = new MyAttribute[3] {
new MyAttribute(){ Name = "Att1", Value = 4 },
new MyAttribute(){ Name = "Att2", Value = 5 },
new MyAttribute(){ Name = "Att3", Value = 6 }
};
我想要这个xml
<?xml version="1.0" encoding="utf-8" ?>
<Class1>
<Att1>4</Att1>
<Att2>5</Att2>
<Att3>6</Att3>
</Class1>
可以生成这个xml和他的xsd。谢谢
编辑:我使用XmlDocument类(System.Xml)解决了问题,如下所示:
public class MyClass
{
public string Name { get; set; }
public MyAttribute[] Elements { get; set; }
public XmlDocument Xml()
{
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement(this.Name);
foreach (MyAttribute att in this.Elements)
{
XmlElement xmlElement = xmlDoc.CreateElement(att.Name);
xmlElement.InnerText = att.Value.ToString();
rootNode.AppendChild(xmlElement);
}
xmlDoc.AppendChild(rootNode);
return xmlDoc;
}
}
对于XSD,我使用XmlSchema(System.Xml.Schema)
我不确定数据库在您的描述中的位置,但为了从您的类的实例创建XML文件,您可以使用XmlElement和XmlAttribute属性装饰类,然后按此处所述对其进行序列化。
为了创建XSD,您可以尝试使用这里建议的XSD工具。
编辑
事实上,看看您想要获得的XML,您甚至不必使用属性,只需使用其中一个链接中描述的XmlSerializer
类即可。例如,要将生成的XML保存为字符串,可以使用:
// before calling this code, create an instance of MyClass and fill properties with appropriate values
// let's assume the instance is named instanceOfMyClass
var stringBuilder = new StringBuilder();
using (TextWriter writer = new StringWriter(stringBuilder))
{
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
serializer.Serialize(writer, instanceOfMyClass);
}
//now You can call stringBuilder.ToString() to get string with the serialized XML