所以我的XML看起来像这样:
<a>
<b c="1" ></b>
<b c="2" ></b>
<b c="3" ></b>
<b c="4" ></b>
</a>
我想使用DataContractSerializerdo在wp7上反序列化。
我遇到了一些观点,如果没有一些技巧,例如将这个XML封装在其他标签中来推送&lt; a&gt;从根本上下来。
这是真的吗?
根据您的要求,我正在添加一些代码
类:
[KnownType(typeof(B))]
[DataContract(Namespace = "")]
public class A:List<B>
{
[DataMember]
public List<B> B
{
List<B> _b = new List<B>();
get { return _b; }
set { _b = value; }
}
}
[DataContract(Namespace = "")]
public class B
{
[DataMember]
public string c = "foo";
}
反序列化:
var serializer = new DataContractSerializer(typeof(A));
var o = serializer.ReadObject(SomeResponseStream);
此的许多其他变体。
顺便说一句 - 这种类的排列将序列化为XML,如下所示:
<a>
<b>
<b c="1" ></b>
<b c="2" ></b>
<b c="3" ></b>
<b c="4" ></b>
</b>
</a>
注意额外的,不需要的&lt; b&gt;
答案 0 :(得分:1)
正如评论中所述,Linq2Xml可以是更好的方式
string xml = @"
<a>
<b>
<b c=""1"" ></b>
<b c=""2"" ></b>
<b c=""3"" ></b>
<b c=""4"" ></b>
</b>
</a>";
var bs = XDocument.Parse(xml)
.Root
.Element("b")
.Elements("b")
.Select(b => new B { c = b.Attribute("c").Value })
.ToList();
public class B
{
public string c = "foo";
}