【发布时间】:2021-11-03 07:44:53
【问题描述】:
我必须按以下方式序列化 XML 结构:
<Toy>
<Parameters>
<!-- to be filled up by a 3rd-party function that delivers in string format -->
<!-- the string format contains all the relevant XML tags -->
<!-- has the following format -->
<!-- <Parameter> ........ </Parameter> <Parameter> ........ </Parameter> -->
<!-- is basically may be an element or array of elements from 3rd party with Parameter tag -->
</Parameters>
.
.
.
.
</Toy>
此第 3 方 XML 内容也是动态的,它可能包含 Array/Scalar/Boolean 值,但确定此第 3 方内容将驻留在“Node”元素内,并且“Node”元素内的所有元素可能包含几个或没有“参数”元素
如何将此第 3 方内容附加到现有的 XML 序列化过程中?
我尝试通过@Charles 的提示通过以下方式实现它:
using System;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
public class Program
{
public class Toy
{
[XmlArray(IsNullable = true)]
public XmlElement[] Parameters { get; set; }
public string Bar { get; set; }
}
public static void Main(string[] args)
{
var xmlStringList = new List<string>();
xmlStringList.Add("<Parameter><Scalar>5</Scalar></Parameter>");
xmlStringList.Add("<Parameter><Scalar>50</Scalar></Parameter>");
xmlStringList.Add("<Parameter><Scalar><Alu>67</Alu></Scalar></Parameter>");
var doc = new XmlDocument();
var elementList = new List<XmlElement>();
foreach (var xmlItem in xmlStringList)
{
doc.LoadXml(xmlItem);
elementList.Add(doc.DocumentElement);
}
var toy = new Toy
{
Parameters = elementList.ToArray(),
Bar = "2"
};
var serializer = new XmlSerializer(typeof(Toy));
serializer.Serialize(Console.Out,toy);
}
}
但结果并不如预期
<?xml version="1.0" encoding="Codepage - 850"?>
<Toy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameters>
<XmlElement>
<Parameter>
<Scalar>5</Scalar>
</Parameter>
</XmlElement>
<XmlElement>
<Parameter>
<Scalar>50</Scalar>
</Parameter>
</XmlElement>
<XmlElement>
<Parameter>
<Scalar>
<Alu>67</Alu>
</Scalar>
</Parameter>
</XmlElement>
</Parameters>
<Bar>2</Bar>
</Toy>
XmLElement 标记不应出现在输出中。无论如何要删除它?预期的输出是:
<?xml version="1.0" encoding="Codepage - 850"?>
<Toy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Parameters>
<Parameter>
<Scalar>5</Scalar>
</Parameter>
<Parameter>
<Scalar>50</Scalar>
</Parameter>
<Parameter>
<Scalar>
<Alu>67</Alu>
</Scalar>
</Parameter>
</Parameters>
<Bar>2</Bar>
</Toy>
【问题讨论】:
标签: c# xml xml-serialization