如何反序列化XML字符串片段?

时间:2014-06-23 01:42:16

标签: c# .net xml

我有一个对象,它有一些属性是XML字符串片段。我想把它们进一步反序列化为对象以便于使用。我怎么能用.NET XML Serializer做到这一点?

以下是XML字符串片段的示例:

<Addr1></Addr1>
<Addr2></Addr2>
<Addr3></Addr3>
<Addr4></Addr4>
<City></City>
<State></State>
<PostalCode></PostalCode>
<Country></Country>

到目前为止,我的尝试导致了这个例外:

<Addr1 xmlns=''> was not expected.

1 个答案:

答案 0 :(得分:3)

如果要将片段反序列化为对象,我假设您有一个强类型对象,因此您可以创建一个辅助方法,使用您尝试反序列化的对象的类型名称添加根元素

示例:

public T DeserializeFragment<T>(string xmlFragment)
{
    // Add a root element using the type name e.g. <MyData>...</MyData>
    var xmlData = string.Format("<{0}>{1}</{0}>", typeof(T).Name, xmlFragment);
    var mySerializer = new XmlSerializer(typeof(T));
    using (var reader = new StringReader(xmlData))
    {
        return (T)mySerializer.Deserialize(reader);
    }
}

用法:

public class MyData
{
    public string Addr1 { get; set; }
    public string Addr2 { get; set; }
    public string Addr3 { get; set; }
    public string Addr4 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
}



string fragment = @"<Addr1>2</Addr1>
                    <Addr2>2</Addr2>
                    <Addr3>2</Addr3>
                    <Addr4>2</Addr4>
                    <City>2</City>
                    <State>2</State>
                    <PostalCode>2</PostalCode>
                    <Country>2</Country>"; 

var result = DeserializeFragment<MyData>(fragment);