Olá
Estou praticando a exportação de arquivos XML com a classe (XmlSerializer) em um projeto de testes que criei, ao tentar realizar a exportação de um arquivo XML passando uma lista de um objeto que possui algum atributo com set privado ocorre o seguinte erro:
"System.InvalidOperationException: 'Cannot deserialize type 'GameStore.Produto.Produtos' because it contains property 'codigoProduto' which has no public setter.'"
Ou seja, para exportar um XML os meus atributos vão ter que estar sempre com o set público? existe alguma forma de contornar isso?
Abaixo segue os códigos de apoio:
public class Produtos
{
public static int idProduto { get; private set; }
public int codigoProduto { get; private set; }
public string nome { get; private set; }
public double valor { get; private set; }
public Produtos(string nome, double valor)
{
this.nome = nome;
this.valor = valor;
idProduto++;
this.codigoProduto = idProduto;
}
private Produtos ()
{
}
public override string ToString()
{
return $"| ▓▓▓▓▓▓▓▓▓ --- PRODUTO --- ▓▓▓▓▓▓▓▓▓ | \n" +
$"| Código: {this.codigoProduto} \n" +
$"| Nome: {this.nome} \n" +
$"| Valor: {this.valor}";
}
}
private static void ExportData(string caminho, FormatoArquivos formato, List<T> dados)
{
if (formato == FormatoArquivos.Xml)
{
//Serializar para XML
var serializar = new XmlSerializer(typeof(List<T>));
try
{
FileStream fs = new FileStream(caminho + "\\dados.xml", FileMode.Create);
using (StreamWriter streamwriter = new StreamWriter(fs))
{
serializar.Serialize(streamwriter, dados);
}
Console.WriteLine($"Arquivo salvo em {caminho}");
}
catch (Exception excecao)
{
throw new Exception(excecao.Message);
}
}
}
ExportarDados<Produtos>.SalvarDados("c:\\temp", ExportarDados<Produtos>.FormatoArquivos.Xml, _listProdutos);