Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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序列化节点_C#_Xml Serialization - Fatal编程技术网

C#Xml序列化节点

C#Xml序列化节点,c#,xml-serialization,C#,Xml Serialization,我有这些课程 public class ProdutosServicos { public List<Produto> Produto { get; set; } } public class Produto { public string Descricao { get; set; } public CodigoTipo Codigo { get; set; } public string Quantida

我有这些课程

public class ProdutosServicos
{           
    public List<Produto> Produto { get; set; }  
}

public class Produto
{
    public string Descricao { get; set; }        
    public CodigoTipo Codigo { get; set; }
    public string Quantidade { get; set; }
    public string Unidade { get; set; }
    public string ValorUnitario { get; set; }
}
公共类ProdutosServicos
{           
公共列表Produto{get;set;}
}
公共类产品
{
公共字符串描述符{get;set;}
公共CodigoTipo Codigo{get;set;}
公共字符串量化{get;set;}
公共字符串Unidade{get;set;}
公共字符串ValorUnitario{get;set;}
}
xml的序列化方式如下所示:

<ProdutosServicos>
   <Produto>
      <Produto>
        ...
      </Produto>
   </Produto>
</ProdutosServicos>
<ProdutosServicos>
   <Produto>
    ...
   </Produto>
</ProdutosServicos>
<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
</ProdutosServicos>

...
但我想这样生成:

<ProdutosServicos>
   <Produto>
      <Produto>
        ...
      </Produto>
   </Produto>
</ProdutosServicos>
<ProdutosServicos>
   <Produto>
    ...
   </Produto>
</ProdutosServicos>
<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
</ProdutosServicos>

...
在序列化过程中,我找不到任何Xml属性来添加属性以“删除”第一个Produto节点

关于如何实现这一点有什么想法吗


谢谢。

只需在列表属性中使用属性XmlElement。像这样

public class ProdutosServicos
{
    // This is the attribute that makes your XML Array looks like a list of XML Elements.
    [XmlElement]
    public List<Produto> Produto { get; set; }
}
公共类ProdutosServicos
{
//这是使XML数组看起来像XML元素列表的属性。
[XmlElement]
公共列表Produto{get;set;}
}
结果会是这样的:

<ProdutosServicos>
   <Produto>
      <Produto>
        ...
      </Produto>
   </Produto>
</ProdutosServicos>
<ProdutosServicos>
   <Produto>
    ...
   </Produto>
</ProdutosServicos>
<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
  <Produto>
    ...
  </Produto>
</ProdutosServicos>

...
...
...

请参见下面的解决方案

类定义

[Serializable]
[XmlRoot("ProdutosServicos")]
public class ProdutosServicos
{
    [XmlElement("Producto")]
    public List<Produto> Produto { get; set; }
}

[Serializable]
public class Produto
{
    public string Descricao { get; set; }
    public CodigoTipo Codigo { get; set; }
    public string Quantidade { get; set; }
    public string Unidade { get; set; }
    public string ValorUnitario { get; set; }
}
[Serializable]
public class CodigoTipo
{

}
XmlSerializer serializer = new XmlSerializer(typeof(ProdutosServicos));
        var productoServices = new ProdutosServicos();
        Produto producto1 = new Produto();
        producto1.Descricao = "Descricao1";
        producto1.Quantidade = "Quantidade1";
        Produto producto2 = new Produto();
        producto2.Descricao = "Descricao2";
        producto2.Quantidade = "Quantidade2";

        List<Produto> collectionProducto = new List<Produto>();
        collectionProducto.Add(producto1);
        collectionProducto.Add(producto2);
        productoServices.Produto = collectionProducto;

        string xmlString = string.Empty;
        using (StringWriter stringWriter = new StringWriter())
        {
            using (XmlWriter writer = XmlWriter.Create(stringWriter))
            {
                serializer.Serialize(writer, productoServices);
                //String in required format
                xmlString = stringWriter.ToString(); 
            }
        }
[可序列化]
[XmlRoot(“ProdutosServicos”)]
公共类ProdutosServicos
{
[XmlElement(“Producto”)]
公共列表Produto{get;set;}
}
[可序列化]
公共类产品
{
公共字符串描述符{get;set;}
公共CodigoTipo Codigo{get;set;}
公共字符串量化{get;set;}
公共字符串Unidade{get;set;}
公共字符串ValorUnitario{get;set;}
}
[可序列化]
公共类CodigoTipo
{
}
要序列化的代码

[Serializable]
[XmlRoot("ProdutosServicos")]
public class ProdutosServicos
{
    [XmlElement("Producto")]
    public List<Produto> Produto { get; set; }
}

[Serializable]
public class Produto
{
    public string Descricao { get; set; }
    public CodigoTipo Codigo { get; set; }
    public string Quantidade { get; set; }
    public string Unidade { get; set; }
    public string ValorUnitario { get; set; }
}
[Serializable]
public class CodigoTipo
{

}
XmlSerializer serializer = new XmlSerializer(typeof(ProdutosServicos));
        var productoServices = new ProdutosServicos();
        Produto producto1 = new Produto();
        producto1.Descricao = "Descricao1";
        producto1.Quantidade = "Quantidade1";
        Produto producto2 = new Produto();
        producto2.Descricao = "Descricao2";
        producto2.Quantidade = "Quantidade2";

        List<Produto> collectionProducto = new List<Produto>();
        collectionProducto.Add(producto1);
        collectionProducto.Add(producto2);
        productoServices.Produto = collectionProducto;

        string xmlString = string.Empty;
        using (StringWriter stringWriter = new StringWriter())
        {
            using (XmlWriter writer = XmlWriter.Create(stringWriter))
            {
                serializer.Serialize(writer, productoServices);
                //String in required format
                xmlString = stringWriter.ToString(); 
            }
        }
XmlSerializer serializer=新的XmlSerializer(typeof(ProdutosServicos));
var productoServices=new ProdutosServicos();
Produto producto1=新Produto();
producto1.descripao=“descripao1”;
producto1.Quantidade=“Quantidade1”;
Produto producto2=新Produto();
product2.descripao=“descripao2”;
product2.Quantidade=“Quantidade2”;
List collectionProducto=新列表();
集合产品添加(产品1);
收集产品添加(产品2);
productoServices.Produto=collectionProducto;
string xmlString=string.Empty;
使用(StringWriter StringWriter=new StringWriter())
{
使用(XmlWriter=XmlWriter.Create(stringWriter))
{
serializer.Serialize(编写器、产品服务);
//所需格式的字符串
xmlString=stringWriter.ToString();
}
}
XML输出

<?xml version="1.0" encoding="utf-16"?>
<ProdutosServicos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Producto>
    <Descricao>Descricao1</Descricao>
    <Quantidade>Quantidade1</Quantidade>
  </Producto>
  <Producto>
    <Descricao>Descricao2</Descricao>
    <Quantidade>Quantidade2</Quantidade>
  </Producto>
</ProdutosServicos>

描述1
数量1
描述2
数量2

您的POCO类准确地表示XML中的内容-如果您序列化POCO,则生成的XML确实是正确的。所以问题是,
产品是一个集合吗?如果是,则只能设置一个属性名(复数形式
Produtos
),则将具有以下结构
。也许这会对你有所帮助@JS_GodBlessAll,是的,Produto是一个集合,我知道如果我将它的名称复数,但要求只有=/,这正是我上面所说的。@Maturano OK。很高兴知道。您还可以检查XML序列化的各种方式,并根据需要操作结果XML。你可以从这里开始