[英]Flattening Serialized XML in C#
如果我有一個對象:
class c { List<b> b; }
class b { string a; }
當c轉換為XML時,結果為:
<c> <b> <b> <a>Hello</a> </b>...
有什么方法可以通過代碼結構或選項使XML變平,從而擺脫其中一層? 我最終希望XML只是:-
<c> <b> <a>Hello</a> </b>....
或者以另一種方式查看問題,如何反序列化:-
<c><b><a>Name</a></b><b><a>Age</a></b></c>
到C#類結構?
提前致謝? 如果不可能,請告訴我。
一種選擇是實現IXmlSerializable,以完全控制類的XML序列化應采用的形式。
另外,您也許可以使用控制XML序列化的屬性來修飾類和屬性。
如果這是您想要的:
<ArrayOfB>
<b>
<a>Name</a>
</b>
<b>
<a>Age</a>
</b>
</ArrayOfB>
然后,這應該工作。
public class XMLPlayground
{
public void Play()
{
List<b> list = new List<b>()
{
new b() {a = "Name"},
new b() {a = "Age"},
};
string str = SerializeToString(list);
Console.WriteLine(str);
}
private string SerializeToString(object o)
{
if (o == null) return "";
var xs = new XmlSerializer(o.GetType());
XmlSerializerNamespaces tellTheSeriliserToIgnoreNameSpaces = new XmlSerializerNamespaces();
tellTheSeriliserToIgnoreNameSpaces.Add(String.Empty, String.Empty);
XmlWriterSettings tellTheWriterToOmitTheXmlDeclaration = new XmlWriterSettings { OmitXmlDeclaration = true };
using (StringWriter writer = new StringWriter())
{
using (var xw = XmlWriter.Create(writer, tellTheWriterToOmitTheXmlDeclaration))
{
xs.Serialize(xw, o, tellTheSeriliserToIgnoreNameSpaces);
return writer.ToString();
}
}
}
}
[Serializable]
public class b
{
public string a { get; set; }
}
這是您要實現的目標的一些見解,但對我而言,解決方案看起來有些深奧。 您可能想嘗試使用帶有XmlTextReader的SAX方法並動態構建對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.