Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XML序列化将属性放置到不同的XML命名空间中_C#_.net_Xml_Visual Studio 2008_Xml Serialization - Fatal编程技术网

C# 使用XML序列化将属性放置到不同的XML命名空间中

C# 使用XML序列化将属性放置到不同的XML命名空间中,c#,.net,xml,visual-studio-2008,xml-serialization,C#,.net,Xml,Visual Studio 2008,Xml Serialization,我使用的是VSTS2008+C++.NET3.0。我使用下面的代码来序列化XML,这是我当前的代码和序列化的XML文件。我的目的是使MyInnerObjectProperties属于一个特殊的XML名称空间(),并将此名称空间作为默认名称空间。有什么办法可以实现吗 电流输出: <?xml version="1.0"?> <MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:/

我使用的是VSTS2008+C++.NET3.0。我使用下面的代码来序列化XML,这是我当前的代码和序列化的XML文件。我的目的是使MyInnerObjectProperties属于一个特殊的XML名称空间(),并将此名称空间作为默认名称空间。有什么办法可以实现吗

电流输出:

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyObjectProperty>
    <MyInnerObjectProperties>
      <MyInnerObjectProperty>
        <ObjectName>Foo Type</ObjectName>
      </MyInnerObjectProperty>
      <MyInnerObjectProperty>
        <ObjectName>Goo Type</ObjectName>
      </MyInnerObjectProperty>
    </MyInnerObjectProperties>
  </MyObjectProperty>
</MyClass>

您需要创建一个XmlSerializerNamespaces对象,并向其中添加所需的名称空间

该对象包含XmlSerializer用于在XML文档实例中生成限定名称的XML名称空间和前缀

在您的c#代码中:

然后,向类添加一个属性,如下所示:

public class MyInnerObject
{
[XmlElement(Namespace = "http://foo/2009")]
更多信息,请访问:

这个怎么样:

[XmlArrayItemAttribute( Namespace = "http://foo.com/2009" /* other attr. params. */ )]
public MyInnerObject[] MyInnerObjectProperties
{
    get { ... }
    set { ... }
}
试一试

对我来说,这产生了:

<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <MyObjectProperty>
        <MyInnerObjectProperties xmlns="http://foo.com/2009">
            <MyInnerObjectProperty>
                <ObjectName>Foo Type</ObjectName>
            </MyInnerObjectProperty>
            <MyInnerObjectProperty>
                <ObjectName>Goo Type</ObjectName>
            </MyInnerObjectProperty>
        </MyInnerObjectProperties>
    </MyObjectProperty>
</MyClass>

富型
粘液型

George,你什么时候停止使用.NET 3.5 SP1的?John,我正在做几个项目。其中一些是从scrach开发的,我将使用.NET3.5SP1+.NET2.0SP2。对于遗留项目,我将保留其原始.Net版本。很遗憾,LINQ不能用于基于.NET3.0的项目中。对我的问题有什么想法吗?我正在研究。我相信有人会在我面前得到答案的。谢谢罗伯特。我的目的不是将MyClass类的所有内容都添加到统一的命名空间中,而是只将MyInnerObjectProperties元素添加到命名空间“”中。我认为您的解决方案将把类MyClass中的所有元素添加到“”中,对吗?对我的问题有什么想法吗?你不必在全班都使用它。可以拾取并选择所需的元素和属性。看见
[XmlArrayItemAttribute( Namespace = "http://foo.com/2009" /* other attr. params. */ )]
public MyInnerObject[] MyInnerObjectProperties
{
    get { ... }
    set { ... }
}
public class MyObject
{
    [XmlArrayItemAttribute("MyInnerObjectProperty", typeof (MyInnerObject),
        IsNullable = false)]
    [XmlArray(Namespace = "http://foo.com/2009")]
    public MyInnerObject[] MyInnerObjectProperties { get; set; }
}
<?xml version="1.0" encoding="utf-8"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <MyObjectProperty>
        <MyInnerObjectProperties xmlns="http://foo.com/2009">
            <MyInnerObjectProperty>
                <ObjectName>Foo Type</ObjectName>
            </MyInnerObjectProperty>
            <MyInnerObjectProperty>
                <ObjectName>Goo Type</ObjectName>
            </MyInnerObjectProperty>
        </MyInnerObjectProperties>
    </MyObjectProperty>
</MyClass>