У меня есть такой 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>
как один объект?
2 ответа
Я решил эту проблему, заключив код 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
, как показано в этом сообщение
Я не уверен, что вы этого хотите, но если вы определите класс для своего элемента 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>
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.