当我反序列化xml字符串时,我需要在名为prop2
的字符串属性上保存XElement outerXml。
我的XML:
<MyObj>
<prop1>something</prop1>
<prop2>
<RSAKeyValue>
<Modulus>...</Modulus>
<Exponent>...</Exponent>
</RSAKeyValue>
</prop2>
<prop3></prop3>
</MyObj>
我的对象:
public class MyObj
{
[XmlElement("prop1")]
public string prop1 { get; set; }
[XmlText]
public string prop2 { get; set; }
[XmlElement(ElementName = "prop3", IsNullable = true)]
public string prop3 { get; set; }
}
我正在使用XmlSerializer
进行反序列化,如下所示:
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new StringReader(myXmlString));
我尝试使用[XmlText]
在prop2
中保存XML文字但我只获得null
。
我需要做些什么来保存<RSAKeyValue><Modulus>...</Modulus><Exponent>...</Exponent></RSAKeyValue>
中的prop2
文字?
答案 0 :(得分:3)
XmlText
会将XML编码为文本(">prop2<..."
),但请参阅XmlTextAttribute
默认情况下,XmlSerializer将类成员序列化为XML元素。但是,如果将XmlTextAttribute应用于成员,则XmlSerializer会将其值转换为XML文本。这意味着该值被编码到XML元素的内容中。
一种可能的解决方案 - 使用XmlNode
作为属性的类型:
public class MyObj
{
[XmlElement("prop1")]
public string prop1 { get; set; }
public XmlNode prop2 { get; set; }
[XmlElement(ElementName = "prop3", IsNullable = true)]
public string prop3 { get; set; }
}
var r = (MyObj)serializer.Deserialize(new StringReader(myXmlString));
Console.WriteLine(r.prop2.OuterXml);
或者,您可以使整个对象实现自定义Xml序列化,或者具有与XML匹配的自定义类型(以便正常读取),并具有将该对象表示为XML字符串的附加属性。