Xdocument napespace c #
-
21-12-2019 - |
Pregunta
Escribo alguna aplicación en MVC y necesito hacer que las cosas que escribo Necesito obtener respuesta XML como esta:
<?xml version="1.0" encoding="utf-8"?>
<getAllShepherdsResponse xmlns="http://www.sheeps.pl/webapi/1_0">
<shepherds>
<shepherd>
<errors>
<error code="1">error1</error>
<error code="-2147483647">error2</error>
<error code="2147483647">error3</error>
</errors>
<shepherdId>1</shepherdId>
<name>name1</name>
<sheeps>
<sheep>
<id>1</id>
<colour>colour1</colour>
<createdOn>1900-01-01T01:01:01+01:00</createdOn>
</sheep>
<sheep>
<id>-2147483647</id>
<colour>colour2</colour>
<createdOn>0001-01-01T00:00:00+01:00</createdOn>
</sheep>
</sheeps>
</shepherd>
</shepherds>
</getAllShepherdsResponse>
creo este código, es fácil de mirar que crean XDocument con Xelements de la base de datos Y para el primer Xelement, tuve un espacio de nombres adicionales, pero quiere trabajar fijamente, ¿cuál es mi problema?:
protected XNamespace xn = "http://www.sheeps.pl/webapi/1_0";
XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement(xn+"getAllShepherdsResponse",
from emp in db.Shepherds.ToList()
select new XElement("shepherd",
new XElement("shepherdId", emp.Id),
new XElement("name", emp.Name),
new XElement("sheeps", from sp in emp.Sheep
select new
XElement("sheep", new XElement("id", sp.Id), new XElement("colour", sp.Colour),new XElement("createdOn", sp.CreatedOn))))));
y obtengo por eso que obtengo tan "XMLNS" cerca de Shepherd?:
<getAllShepherdsResponse xmlns="http://www.sheeps.pl/webapi/1_0">
<shepherd xmlns="">
<shepherdId>1</shepherdId>
<name>A</name>
<sheeps>
<sheep>
<id>1</id>
<colour>Red</colour>
<createdOn />
</sheep>
<sheep>
<id>2</id>
<colour>Blue</colour>
<createdOn />
</sheep>
</sheeps>
</shepherd>
</getAllShepherdsResponse>
Solución
Necesitas crear todos los elementos en el espacio de nombres, como con
new XElement(xn+"getAllShepherdsResponse",
from emp in db.Shepherds.ToList()
select new XElement(xn+"shepherd",
new XElement(xn+"shepherdId", emp.Id),
new XElement(xn+"name", emp.Name),
new XElement(xn+"sheeps", from sp in emp.Sheep
select new
XElement(xn+"sheep", new XElement(xn+"id", sp.Id), new XElement(xn+"colour", sp.Colour),new XElement(xn+"createdOn", sp.CreatedOn))))));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow