我的班级看起来像
public class Test
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}
我希望xml结果如下:
<NodeList>
<Node>
<DataNode Key="Name" Value="Tom" />
<DataNode Key="Age" Value="30" />
</Node>
<Node>
<DataNode Key="Name" Value="John" />
<DataNode Key="Age" Value="35" />
</Node>
</NodeList>
我试图在属性中设置XmlAttribute,但结果不是我想要的。有什么建议吗?
更新: 这就是我得到的:
<?xml version="1.0" encoding="utf-16"?><Node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Allen" Age="28" />
答案 0 :(得分:1)
我建议您对数据使用非常简单的方法,如下所示:
[Serializable()]
public class NodeList {
[XmlArray("Node")]
[XmlArrayItem("DataNode")]
public Test[] Nodes;
}
public class Test {
[XmlAttribute]
public string Name { get; set; }
public int Age { get; set; }
}
并像这样使用它:
string folderpath = Application.StartupPath + "\\settings";
string appSettingsFilename = "testsettings2";
if (!Directory.Exists(folderpath))
Directory.CreateDirectory(folderpath);
string filepath = folderpath + "\\" + appSettingsFilename + ".xml";
NodeList nodes = new NodeList();
XmlSerializer serializer = new XmlSerializer(typeof(NodeList));
TextWriter configWriteFileStream = new StreamWriter(filepath);
nodes.Nodes = new Test[2] {
new Test() { Name = "Tom", Age=30},
new Test() { Name = "John", Age=35}
};
serializer.Serialize(configWriteFileStream, nodes);
configWriteFileStream.Close();
你会得到:
<?xml version="1.0" encoding="utf-8"?>
<NodeList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Node>
<DataNode Name="Tom" Age="30" />
<DataNode Name="John" Age="35" />
</Node>
</NodeList>
话虽这么说,为了获得你想要的XML文件,你应该实际声明你的类(注释):
[Serializable()]
public class DummyClass2 {
[XmlElement("NodeList")] //necessary to indicate that this is an element, otherwise will be considered as array
public TestList[] NodeList = null;
}
public class TestList {
[XmlArray("Node")] //let this be array
[XmlArrayItem("DataNode")]
public Test[] TestItem { get; set; }
}
public class Test {
private string key;
[XmlAttribute("Key")]
public string Key { //declare as Key instead
get { return key; }
set { key = value; }
}
private string value2; //cannot be int, must be string to accommodate both "Tom" and "30"
[XmlAttribute("Value")]
public string Value { //declare as Value instead
get { return value2; }
set { value2 = value; }
}
}
你这样使用它:
string folderpath = Application.StartupPath + "\\settings";
string appSettingsFilename = "testsettings";
if (!Directory.Exists(folderpath))
Directory.CreateDirectory(folderpath);
string filepath = folderpath + "\\" + appSettingsFilename + ".xml";
DummyClass2 dummyClass2 = new DummyClass2();
XmlSerializer serializer = new XmlSerializer(typeof(DummyClass2));
TextWriter configWriteFileStream = new StreamWriter(filepath);
dummyClass2.NodeList = new TestList[2] {
new TestList() {
TestItem = new Test[2] {
new Test() { Key="Name", Value="Tom"},
new Test() { Key="Age", Value="30"}
}
},
new TestList() {
TestItem = new Test[2] {
new Test() { Key="Name", Value="John"},
new Test() { Key="Age", Value="35"}
}
}
};
serializer.Serialize(configWriteFileStream, dummyClass2);
configWriteFileStream.Close();
你应该得到:
<?xml version="1.0" encoding="utf-8"?>
<DummyClass2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<NodeList>
<Node>
<DataNode Key="Name" Value="Tom" />
<DataNode Key="Age" Value="30" />
</Node>
</NodeList>
<NodeList>
<Node>
<DataNode Key="Name" Value="John" />
<DataNode Key="Age" Value="35" />
</Node>
</NodeList>
</DummyClass2>
答案 1 :(得分:0)
您不需要序列化。试试这个
$FileParentDir$/$FileNameWithoutExtension$.css