我有以下XML:
<CallStep>
<StepXaml>
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:uc="clr-namespace:CallTracker.Library.UserControls.BaseUserControls;assembly=CallTracker.Library">
<uc:LabelValueControl Label="TestLabel" Value="356733" />
</StackPanel>
</StepXaml>
</CallStep>
我希望将其存储在属性中
[XmlElement("StepXaml")]
public object StepXaml { get; set; }
我正在使用XmlSerializer将XML反序列化为包含StepXaml属性的类。目前,当我反序列化XML时,<StackPanel>
被反序列化为自己的节点。
是否有办法阻止反序列化程序尝试向下钻取<StackPanel>
,而是在<StepXaml>
和</StepXaml>
之间保留所有内容。 {{1}}作为一个对象返回?
答案 0 :(得分:0)
我不确定这是否是您想要的,但如果您为CallStep
元素定义了这样一个类:
public class CallStep
{
//XmlElement attribute is not needed, because the name of the
//property and the XML element is the same
public XmlDocument StepXaml { get; set; }
}
然后像这样调用反序列化:
//xml is a string containing the XML from your question
XmlSerializer serializer = new XmlSerializer(typeof(CallStep));
using (StringReader reader = new StringReader(xml))
{
CallStep cs = (CallStep)serializer.Deserialize(reader);
}
然后cs.StepXaml
将是一个包含以下内容的XmlDocument:
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:uc="clr-namespace:CallTracker.Library.UserControls.BaseUserControls;assembly=CallTracker.Library">
<uc:LabelValueControl Label="TestLabel" Value="356733" />
</StackPanel>
答案 1 :(得分:0)
我通过将XAML代码包装在CDATA块中来解决这个问题,如下所示:
<StepXaml>
<![CDATA[<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:uc="clr-namespace:CallTracker.Library.UserControls.BaseUserControls;assembly=CallTracker.Library">
<uc:LabelValueControl Label="TestLabel2" Value="356738124315" />
</StackPanel>]]>
</StepXaml>
然后我将其提取到我可以在ContentControl
中使用的对象,如post