簡體   English   中英

在C#中展平序列化的XML

[英]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方法並動態構建對象。

C#Xml序列化,集合和根元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM