我无法从XML中检索“test”元素的集合。 我无法弄清楚我的语法有什么问题。
以下是XML:
<tests>
<username>Me</username>
<password>meme</password>
<test>
<title>Test This</title>
<description>To verify this</description>
</test>
<test>
<title>Test That</title>
<description>To verify that</description>
</test>
</tests>
这是C#类:
namespace MyProject
{
public class Temp
{
[DataContract(Name = "tests", Namespace = "")]
public class Tests
{
[DataMember(Name = "username", Order = 0)]
public string Username { get; set; }
[DataMember(Name = "password", Order = 1)]
public string Password { get; set; }
[DataMember(Name = "test", Order = 2)]
public List<Test> testList;
public Tests()
{
}
}
[DataContractCollection(Name = "test", Namespace = "")]
public class Test : List<Test>
{
[DataMember(Name = "title", Order = 0)]
public string Title { get; set; }
[DataMember(Name = "description", Order = 1)]
public string Description{ get; set; }
public Test()
{ }
public Test(String title, String desc)
{
this.Title = title;
this.Description= desc;
}
}
}
}
我的序列化代码:
FileStream fs = new FileStream("C:/bla/file.xml", FileMode.Open);
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
DataContractSerializer serializer = new DataContractSerializer(typeof(Temp3.TestGroup), knownTypeList);
Tests tests = (Tests)serializer.ReadObject(reader, true);
reader.Close();
fs.Close();
在调试模式下,tests.testList什么都没有。
如果我要将public List<Test> testList;
更改为public Test testList;
,我会得到第一个测试元素。我也尝试过使用Test []或ArrayList。
可以指出出了什么问题吗?非常感谢。
作为一个附带问题,是否有XML的DataContractSerialization(具有深层嵌套元素)的详细示例?我发现的大多数都是非常基本的。
答案 0 :(得分:0)
嗯,我想我已经弄清楚了 - 至少部分是这样。 多亏了这个: http://borismod.blogspot.com/2009/06/v2-wcf-collectiondatacontract-and.html
我发现的其他事情是我必须删除订单 [DataMember(Name =“test”,Order = 2)] public List testList
使用博客中的示例,我的测试元素将被testlist括起来。因此,testlist是一个额外的元素。