El siguiente código produce esta salida:¿Cómo puedo forzar a XDocument a producir "UTF-8" en la línea de declaración?
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<customers>
<customer>
<firstName>Jim</firstName>
<lastName>Smith</lastName>
</customer>
</customers>
¿Cómo puedo conseguir que se produzca encoding="utf-8"
en lugar de encoding="utf-16"
?
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
namespace test_xml2
{
class Program
{
static void Main(string[] args)
{
List<Customer> customers = new List<Customer> {
new Customer {FirstName="Jim", LastName="Smith", Age=27},
new Customer {FirstName="Hank", LastName="Moore", Age=28},
new Customer {FirstName="Jay", LastName="Smythe", Age=44},
new Customer {FirstName="Angie", LastName="Thompson", Age=25},
new Customer {FirstName="Sarah", LastName="Conners", Age=66}
};
Console.WriteLine(BuildXmlWithLINQ(customers));
Console.ReadLine();
}
private static string BuildXmlWithLINQ(List<Customer> customers)
{
XDocument xdoc =
new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("customers",
new XElement("customer",
new XElement("firstName", "Jim"),
new XElement("lastName", "Smith")
)
)
);
var wr = new StringWriter();
xdoc.Save(wr);
return wr.GetStringBuilder().ToString();
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Display()
{
return String.Format("{0}, {1} ({2})", LastName, FirstName, Age);
}
}
}
Parece un error en la API que el serializador ignora este valor en su 'XDeclaration'. –
@KirkWoll No es cierto, ya que la codificación predeterminada para XML es UTF8, por lo que se puede omitir. Por lo tanto, surge la pregunta de por qué la necesidad de escribir explícitamente UTF-8 allí. Probablemente el problema fue que UTF-16 estaba allí, no es que no hubiera UTF-8. –
solución más simple y funciona muy bien! – BJladu4