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

C# 如何反序列化XML字符串片段?,c#,.net,xml,C#,.net,Xml,我有一个对象,它的一些属性是XML字符串片段。我想将它们进一步反序列化为对象,以便于使用。如何使用.NET XML序列化程序实现这一点 以下是XML字符串片段的示例: <Addr1></Addr1> <Addr2></Addr2> <Addr3></Addr3> <Addr4></Addr4> <City></City> <State></State>

我有一个对象,它的一些属性是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.

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

例如:

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

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

例如:

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

那么您的片段没有根元素?为什么不简单地添加一个根元素然后反序列化?那么您的片段没有根元素?为什么不简单地添加一个根元素然后反序列化?