很抱歉这个简单的问题,但我找不到答案......
internal class Program
{
private static void Main(string[] args)
{
var x = new Test[] {new Test() {X = 1}, new Test() {X = 2}};
var serializer = new XmlSerializer(typeof(Test[]));
serializer.Serialize(Console.Out, x);
}
}
public class Test
{
public int X { get; set; }
}
返回
<ArrayOfTest>
<Test>
<X>1</X>
</Test>
<Test>
<X>2</X>
</Test>
</ArrayOfTest>
如何删除<ArrayOfTest>
?我只发现了如何重命名根元素。如果在Test[]
内部另一个类(我们可以使用[XmlElement("Test")]
)的情况下如何删除。
答案 0 :(得分:1)
您必须创建另一个包装Test
类的类:
[XmlRoot("Tests")]
public class Tests: List<Test>
{
}
现在将外部元素命名为&#34; Tests&#34;。
现在使用带有新包装类的序列化程序:
var serializer = new XmlSerializer(typeof(Tests));
编辑:如果你想删除一个级别的标签,可以选择其他选项,但我不确定它是否更清晰(但可能更适合您的需求):
class Program
{
static void Main(string[] args)
{
var x = new Tests { 1, 2, 3 };
var serializer = new XmlSerializer(typeof(Tests));
serializer.Serialize(Console.Out, x);
}
}
[XmlRoot("Tests")]
public class Tests : List<int>
{
}
输出:
<Tests>
<int>1</int>
<int>2</int>
</Tests>
答案 1 :(得分:0)
如果您不想使用正确的格式,而只需要信息本身与测试对象,请将其写入MemoryStream(System.IO),然后切断第一行和最后一行。
var x = new Test[] { new Test() { X = 1 }, new Test() { X = 2 } };
var serializer = new XmlSerializer(typeof(Test[]));
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, x);
ms.Position = 0;
byte[] data = new byte[ms.Length];
ms.Read(data, 0, Convert.ToInt32(ms.Length));
string xmlSerializedObject = Encoding.UTF8.GetString(data, 0, Convert.ToInt32(ms.Length)));`