将动态xml标记添加到序列化对象而不修改对象

时间:2016-06-07 11:13:03

标签: c# xml serialization

我有一个像这样序列化的对象:

     [XmlRoot("MyObject")]
     [Serializable]
     public class MyObject
     {
        public MyObject()
        {       
        }

        [XmlAttribute("name")]
        public string Name { get; set; }    
     }

现在我可以使用以下代码在xml文件中导出此对象:

    public byte[] Export(MyObject myObject)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
        byte[] value = null;
        using (MemoryStream stream = new MemoryStream())
        {
            StreamWriter writer = new StreamWriter(stream);
            serializer.Serialize(writer, myObject);
            value = stream.ToArray();
        }
        return value;
    }

目前,我导出的xml是这样的:

        <MyObject Name="nameData">

我想导出其他数据(与myObject相关的名称列表,并从其他服务获取)。但我无法修改我的MyObject类。

这就是我获取附加数据的方式:

public XElement GetExtraData(MyObject myObject)
{
            List<string> datas = service.GetData(myObject);
            var otherDatas = new XElement("otherDatas");
            foreach (var data in datas)
            {
                var dataElement = new XElement("data");
                var valueAttribute = new XAttribute("Value", data);
                dataElement.Add(valueAttribute);
            }
            otherDatas.Add(dataElement);
}

我想将此otherDatas元素追加到我之前的元素以获取以下内容:

<MyObject Name="nameData">
<data Value="valueData">
<data Value="valueData">
<data Value="valueData">

但是我没有看到,因为这个新方法返回了我创建的xElement,本机.net序列化返回了一个字节数组。

1 个答案:

答案 0 :(得分:0)

GetExtraData作为Nodes返回的var doc = new XDocument(GetExtraData(new MyObject { Name = "someOtherName" })); var byt = Export(new MyObject { Name = "nameData" }); using (var stream = new MemoryStream(byt)) { var element = new XElement(XElement.Load(stream)); element.Add(doc.Nodes()); } 添加到原始xml:

element

并保存{{1}}