C# 如何反序列化XML字符串片段?
我有一个对象,它的一些属性是XML字符串片段。我想将它们进一步反序列化为对象,以便于使用。如何使用.NET XML序列化程序实现这一点 以下是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>
<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);
那么您的片段没有根元素?为什么不简单地添加一个根元素然后反序列化?那么您的片段没有根元素?为什么不简单地添加一个根元素然后反序列化?