如何更改XML根名称以XML序列化? [英] How to change XML root name with XML Serialization?

查看:201
本文介绍了如何更改XML根名称以XML序列化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用C#做XML序列化时更改根名称。

I am trying to change the root name when doing XML serialization with C#.

它总是类名,而不是我想设置它的名字。

It always takes the class name and not the name I am trying to set it with.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {


            MyTest test = new MyTest();
            test.Test = "gog";

            List<MyTest> testList = new List<MyTest>() 
            {    
                test 
            }; 

            SerializeToXML(testList);
        }

        static public void SerializeToXML(List<MyTest> list)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<MyTest>));
            TextWriter textWriter = new StreamWriter(@"C:\New folder\test.xml");
            serializer.Serialize(textWriter, list);
            textWriter.Close();
        }
    }


}





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApplication1
{

    [XmlRootAttribute(ElementName = "WildAnimal", IsNullable = false)]
    public class MyTest
    {
        [XmlElement("Test")]
        public string Test { get; set; }


    }
}



结果

Result

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMyTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyTest>
    <Test>gog</Test>
  </MyTest>
</ArrayOfMyTest>



它不会将其更改为WildAnimal。我不知道为什么。我从一个教程得到这个。

It does not change it to WildAnimal. I am not sure why. I got this from a tutorial.

修改 @马克

感谢。我现在看到你做什么似乎只是这样奇怪的是,你必须让周围的包装。我有一个问题,如果我想使这种格式会发生什么

Thanks. I now see what your doing just seems so odd that you have to make a wrapper around it. I have one more question what happens if I wanted to make this format

<root>
   <element>
        <name></name>
   </element>
   <anotherElement>
       <product></product> 
   </anotherElement>
</root>



所以像一个嵌套的元素。我将不得不作出一个新的类为第二部分,坚持在包装类呢?

so like a nested elements. Would I have to make a new class for the second part and stick that in the wrapper class too?

推荐答案

在你〔实施例, MyTest的不会根;你想在阵列重新命名?我会写一个包装:

In your exmaple, MyTest is not the root; are you trying to rename the array? I would write a wrapper:

[XmlRoot("NameOfRootElement")]
public class MyWrapper {
    private List<MyTest> items = new List<MyTest>();
    [XmlElement("NameOfChildElement")]
    public List<MyTest> Items { get { return items; } }
}

static void Main() {
    MyTest test = new MyTest();
    test.Test = "gog";

    MyWrapper wrapper = new MyWrapper {
        Items = {  test }
    };
    SerializeToXML(wrapper);
}

static public void SerializeToXML(MyWrapper list) {
    XmlSerializer serializer = new XmlSerializer(typeof(MyWrapper));
    using (TextWriter textWriter = new StreamWriter(@"test.xml")) {
        serializer.Serialize(textWriter, list);
        textWriter.Close();
    }
}

这篇关于如何更改XML根名称以XML序列化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆