C# 如何正确序列化

C# 如何正确序列化,c#,xml-serialization,C#,Xml Serialization,如果我有一个电影类作为 [XmlRoot("MovieClass")] public class Movie { [XmlElement("Novie")] public string Title; [XmlElement("Rating")] public int rating; } 如何在“Movie”元素中设置属性“x:uid”,以便在使用XmlSerializer XmlSerializer s=newxmlserializer(typeof(MovieCl

如果我有一个电影类作为

[XmlRoot("MovieClass")]
public class Movie
{
   [XmlElement("Novie")]
   public string Title;

   [XmlElement("Rating")]
   public int rating; 
}
如何在“Movie”元素中设置属性“x:uid”,以便在使用
XmlSerializer XmlSerializer s=newxmlserializer(typeof(MovieClass))
时输出 是这样的:

<?xml version="1.0" encoding="utf-16"?>
<MovieClass>
   <Movie x:uid="123">Armagedon</Movie>
</MovieClass>

阿玛格登
而不是像这样

<?xml version="1.0" encoding="utf-16"?>
<MovieClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Movie x:uid="123" Title="Armagedon"/>
</MovieClass>


注意:我想要
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“xmlns:xsd=”http://www.w3.org/2001/XMLSchema“
删除,如果可能的话。

我在你原来的帖子中回答了这个问题,但我认为这篇文章的措辞更好,所以我也会把它贴在这里,如果它以副本形式关闭,您可以修改您的原始帖子以反映此问题

我认为如果没有自定义类型或显式实现序列化方法,这是不可能的

您可以这样做一个自定义类

class MovieTitle
{
    [XmlText]
    public string Title { get; set; }
    [XmlAttribute(Namespace="http://www.myxmlnamespace.com")]
    public string uid { get; set; }
    public override ToString() { return Title; }
}

[XmlRoot("MovieClass")]
public class Movie
{
   [XmlElement("Movie")]
   public MovieTitle Title;
}
这将产生:

<MovieClass xmlns:x="http://www.myxmlnamespace.com">
  <Movie x:uid="movie_001">Armagedon</Movie>
</MovieClass>

如果没有将x声明为名称空间前缀,则它不是有效的XML。Quintin的回答告诉您如何获取有效的XML

虽然措辞可能更好,但复制品。
  XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  ns.Add("x", "http://www.myxmlnamespace.com");