热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么XmlTypeAttribute.Namespace没有为根元素设置名称空间?

如何解决《为什么XmlTypeAttribute.Namespace没有为根元素设置名称空间?》经验,为你挑选了1个好方法。

我从XSD生成了类似的类型:

[XmlType(Namespace = "http://example.com")]
public class Foo
{
    public string Bar { get; set; }
}

如下序列化:

var stream = new MemoryStream();
new XmlSerializer(typeof(Foo)).Serialize(stream, new Foo() { Bar = "hello" });
var xml = Encoding.UTF8.GetString(stream.ToArray());

输出是这样的:



  hello

为什么根元素没有设置名称空间?当然,我可以这样强迫它:

var stream = new MemoryStream();
var defaultNamespace = ((XmlTypeAttribute)Attribute.GetCustomAttribute(typeof(Foo), typeof(XmlTypeAttribute))).Namespace;
new XmlSerializer(typeof(Foo), defaultNamespace).Serialize(stream, new Foo() { Bar = "hello" });
var xml = Encoding.UTF8.GetString(stream.ToArray());

然后输出是这样的:



  hello

但我不得不做我必须做的额外步骤.反序列化时,需要类似的代码.该属性是否有问题,或者说事情是如何工作的,是否有望进行额外的步骤?



1> John Saunder..:

[XmlType]既不设置根元素的名称也不设置名称空间.它设置了它所在类的类型.

要设置根元素的名称,请使用[XmlRoot].

[XmlRoot(Name="FooElement", Namespace = "http://example.com")] // NS for root element
[XmlType(Name="FooType", Namespace = "http://example.com/foo")] // NS for the type itself
public class Foo
{
    public string Bar { get; set; }
}

设置的名称和名称空间[XmlType]将在XML Schema中显示为序列化类型,可能在complexType声明中.xsi:type如果需要,也可以在属性中看到它.


上述声明将生成XML


使用XSD



推荐阅读
author-avatar
手机用户2502922313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有