[英]Deserialize XML to C# object with arbitrary nested XML
因此,我已盡力進行了搜索,但找不到我遇到的確切問題。
這是我的嵌套XML:
<Message>
<Foo>
<Bar>1</Bar>
<Baz>2</Baz>
<Qux>3</Qux>
</Foo>
</Message>
我在C#中有一個課:
[Serializable()]
[XmlRoot("Message")]
public class Foo
{
[XmlElement("Bar")]
public string Bar { get; set; }
[XmlElement("Baz")]
public string Baz { get; set; }
[XmlElement("Qux")]
public string Qux { get; set; }
}
現在,Message只是任意的,並且隨每個XML消息一起發送。 因此,每條發送的XML消息周圍都會帶有一個<Message>
標記。 當我將Foo
用作XmlRoot
它將引發錯誤,而將Message
用作XmlRoot
它將無法識別子元素。 我正在尋找一個干凈且容易的解決方案。 謝謝!
我沒有測試過,但是應該可以。
[Serializable()]
[XmlRoot("Message")]
public class Message
{
[XmlElement("Foo")]
public Foo Foo { get; set; }
}
[Serializable()]
public class Foo
{
[XmlElement("Bar")]
public string Bar { get; set; }
[XmlElement("Baz")]
public string Baz { get; set; }
[XmlElement("Qux")]
public string Qux { get; set; }
}
用於在此處獲取正確的模型鏈接
之后,您可以使用以下方法進行序列化和反序列化:
public static class XMLFactory
{
public static T XmlDeserializeFromString<T>(this string objectData)
{
return (T)XmlDeserializeFromString(objectData, typeof(T));
}
public static object XmlDeserializeFromString(this string objectData, Type type)
{
try
{
var serializer = new XmlSerializer(type);
object result;
using (TextReader reader = new StringReader(objectData))
{
result = serializer.Deserialize(reader);
}
return result;
}
catch (Exception ex)
{
LoggerHelper.LogError(ex.ToString());
return null;
}
}
public static string XmlSerializeToString(this object objectInstance)
{
var serializer = new XmlSerializer(objectInstance.GetType());
var sb = new StringBuilder();
using (TextWriter writer = new StringWriter(sb))
{
serializer.Serialize(writer, objectInstance);
}
return sb.ToString();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.