Come definire un metodo [OperationContract] [WebGet] per restituire l'XML memorizzato in una stringa, senza codificare HTML la stringa?Come emettere un XML puro per un metodo [WebGet] in WCF?
L'applicazione sta utilizzando il servizio WCF per restituire il contenuto XML/XHTML che è stato memorizzato come stringa. L'XML non corrisponde ad alcuna classe specifica tramite [DataContract]. È pensato per essere consumato da un XSLT.
[OperationContract]
[WebGet]
public XmlContent GetContent()
{
return new XmlContent("<p>given content</p>");
}
ho questa classe:
[XmlRoot]
public class XmlContent : IXmlSerializable
{
public XmlContent(string content)
{
this.Content = content;
}
public string Content { get; set; }
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteRaw(this.Content);
}
#endregion
}
Ma quando serializzato, v'è un tag radice l'avvolge il contenuto attribuito.
<XmlContent>
<p>given content</p>
</XmlContent>
so come cambiare il nome della tag root ([XmlRoot (ElementName = "div")]), ma ho bisogno di omettere il tag root, se possibile.
Ho anche provato [DataContract] invece di IXmlSerializable, ma sembra meno flessibile.
Grazie! Funziona, ma ha lo svantaggio di deserializzare l'XML e quindi di ri-serializzarlo. Non efficiente come vorrei, ma almeno elimina il tag radice. Grazie per l'alternativa. –
Sì, penso che se i tuoi dati originali sono memorizzati come una stringa, devi passare attraverso questa procedura multi-step. Se si tratta solo di stringhe statiche, è possibile de-ser una sola volta e quindi memorizzare nella cache il risultato. Supponendo che sia un modello da compilare per il frammento finale del documento: è possibile memorizzare nella cache il modello e inserire i bit dinamici a ogni richiesta. – Cheeso
utilizzando questo esempio con versioni mono 2.10.8.1 - Tipo di eccezione "System.Xml.XmlElement" non può avere un attributo DataContract Nome impostato su null o stringa vuota. – Tom