我有一个像这样序列化的对象:
[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序列化返回了一个字节数组。
答案 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}}