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。你可以从这里开始