不可能?如何使用DataContractSerializer反序列化?

时间:2013-09-03 18:52:05

标签: c# xml windows-phone-7 datacontractserializer

所以我的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;

1 个答案:

答案 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";
}