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

本文关键字:字符串 片段 XML 反序列化 | 更新日期: 2023-09-27 18:09:55

我有一个对象,它有一些属性是XML字符串片段。我想把它们进一步反序列化成更容易使用的对象。我如何使用。net XML序列化器做到这一点?

下面是一个XML字符串片段的例子:

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

到目前为止,我的尝试导致了以下异常:

<Addr1 xmlns=''> was not expected.

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

如果你想将片段反序列化为对象我假设你有一个强类型对象那么你可以创建一个助手方法来添加根元素使用你想反序列化的对象的类型名

的例子:

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);