当前位置:  开发笔记 > 编程语言 > 正文

如何使用属性序列化类

如何解决《如何使用属性序列化类》经验,为你挑选了2个好方法。

我有一堂课

[XmlRoot]


[XmlAttribute(AttributeName="x:uid")]
public string uid;


它在编译时是正常的..但是在运行时,异常发生在行

XmlSerializer serializer = new XmlSerializer(typeof(myClass));

因为"x:uid"中的无效字符..我的类中的元素需要有一个"x:uid"属性用于本地化目的..我该怎么做?

谢谢!



1> Greg Beech..:

要设置属性的命名空间,您需要使用Namespace属性XmlAttributeAttribute.

如果用于该命名空间的前缀是"x"特别重要,那么您可以XmlSerializerNamespaces在进行序列化时使用该类来控制它,可选地使用XmlNamespaceDeclarationsAttribute.


这是一个有效的例子:

[XmlRoot(Namespace = "http://foo")]
public class MyClass
{
    private XmlSerializerNamespaces xmlns;

    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces Xmlns 
    {
        get
        {
            if (xmlns == null)
            {
                xmlns = new XmlSerializerNamespaces();
                xmlns.Add("x", "http://xxx");
            }
            return xmlns;
        }
        set { xmlns = value; }
    }

    [XmlAttribute("uid", Namespace = "http://xxx")]
    public int Uid { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var s = new XmlSerializer(typeof(MyClass));
        s.Serialize(Console.Out, new MyClass { Uid = 123 });
        Console.ReadLine();
    }
}

哪个产生:





2> Marc Gravell..:

您需要指定实际的命名空间 - 而不是别名(编写者将决定):

[XmlAttribute(AttributeName="uid", Namespace="http://my/full/namespace")]
public string uid;

请注意,const string对于命名空间等通常使用" ".此外,公共字段不是一个好主意 - 使用C#3.0可能会有(xml属性未显示):

public string Uid {get;set;}

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有