pro*_*eek 5 c# xml xml-serialization
我可以使用 XmlSerializer 从 C# 类获取此 XML 文件。
<?xml version="1.0" encoding="utf-8"?>
<Component xmlns:spirit="b" xmlns:chrec="a" MovieName="0" BlocksNotCovered="0">
  <ClassInfoList>
    <chrec:string>hello</chrec:string>
    <chrec:string>world</chrec:string>
  </ClassInfoList>
  <moduleName />
  <world>
    <x>10</x>
    <y>20</y>
  </world>
</Component>
Run Code Online (Sandbox Code Playgroud)
如何为 chrec 和 spriti 添加前缀命名空间?例如,我怎样才能得到这个XML文件?
<?xml version="1.0" encoding="utf-8"?>
<spirit:Component xmlns:spirit="b" xmlns:chrec="a" MovieName="0" BlocksNotCovered="0">
  <spirit:ClassInfoList>
    <chrec:string>hello</chrec:string>
    <chrec:string>world</chrec:string>
  </spirit:ClassInfoList>
  <spirit:moduleName />
  <chrec:world>
    <chrec:x>10</chrec:x>
    <chrec:y>20</chrec:y>
  </chrec:world>
</spirit:Component>
Run Code Online (Sandbox Code Playgroud)
这是 C# 代码。
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Linq;
namespace Coverage
{
    public class Hello
    {
        public int x;
        public int y;
        public Hello()
        {
            x = 10;
            y = 20;
        }
    }
    public class Component {
        [XmlAttribute("MovieName")]
        public int MovieName;
        [XmlAttribute("BlocksNotCovered")]
        public int BlocksNotCovered;
        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces ns;
        public List<string> ClassInfoList;
        public string moduleName;
        public Hello world;
        public Component()
        {
            ClassInfoList = new List<string>() {"hello", "world"};
            MovieName = 0;
            BlocksNotCovered = 0;
            moduleName = "";
            world = new Hello();
        }
    }
    class Cov2xml
    {
        static void Main(string[] args)
        {
            string xmlFileName = "perf.xml";
            Component report = new Component();
            TextWriter writeFileStream = new StreamWriter(xmlFileName);
            report.ns = new XmlSerializerNamespaces();
            report.ns.Add("chrec","a");
            report.ns.Add("spirit","b");
            var ser = new XmlSerializer(typeof(Component));
            ser.Serialize(writeFileStream, report, report.ns);
            writeFileStream.Close();            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
    感谢有能力的_tech 的链接,我可以找到方法。
可以使用XmlRootAttribute,重要的是名称空间是命名空间,而不是命名空间名称。在示例中,它应该是“b”而不是“chrec”。
[XmlRootAttribute("Component", Namespace="http://namespace", IsNullable = false)]
public class Component {
Run Code Online (Sandbox Code Playgroud)
您可以在变量之前使用 XmlElement。
[XmlElement("xyz", Namespace="http://www.namespace", IsNullable = false)]
int x;
Run Code Online (Sandbox Code Playgroud)
你会得到这个。
<?xml version="1.0" encoding="utf-8"?>
<chrec:Component xmlns:spirit="http:..." MovieName="0" BlocksNotCovered="0" xmlns:chrec="...">
  <chrec:ClassInfoList>
    <chrec:string>hello</chrec:string>
    <chrec:string>world</chrec:string>
  </chrec:ClassInfoList>
  <chrec:moduleName />
  <chrec:world>
    <spirit:xyz>10</spirit:xyz>
    <chrec:y>20</chrec:y>
  </chrec:world>
</chrec:Component>
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           11307 次  |  
        
|   最近记录:  |