通过ASMX Web服务进行序列化时保持空格/换行符

我正在ASMX Webservice(Legacy .NET SOAP Service)中对XML文档进行一些预处理,以便最终在Silverlight前端使用。

我正在将该XML文档处理为POCO对象以便于使用。 该对象定义如下:

public class CACDocument : ITextDocument { #region Properties public string Title { get; set; } public string Text { get; set; } public List CodeList { get; set; } public XElement FormatedText { get; set; } #endregion #region Constructor public CACDocument() { CodeList = new List(); } #endregion } 

该对象中的Text属性包含基本格式化的文本(换行符,空格等等)。 提供该属性的XML节点如下所示:

  A TITLE FOLLOWED BY two line breaks Some text followed by a line break Some more text that might extend for a paragraph or two followed by more line breaks Still more text  

一切都很好,格式保持正如我所期望的那样,Web服务序列化要发送到前端的数据。 我猜测在尝试优化带宽时,序列化对象会在发送之前从Text属性中删除额外的空格和换行符。 在这个特定的实例中,格式化很重要。 有没有办法强制Web服务维护这个空格/换行格式?

我想我的代码替换了一些代码来代替有问题的项目,然后转换回前端,但这让我觉得有点像kludge。

您可以将其序列化为CDATA部分:

  [XmlIgnore] public string Text { get; set; } private static readonly XmlDocument _xmlDoc = new XmlDocument(); [XmlElement("Text")] public XmlCDataSection TextCData { get { return _xmlDoc.CreateCDataSection(Text); } set { Text = value.Data; } } 

文本将被序列化为:

  

我认为你指的是ASMX网络服务?

实际上,我认为如果没有作为字节数组进行序列化,就有办法做到这一点。 或者,您可以实现IXmlSerializable并自己完成所有工作。


你会想要这样的东西:

 public class CACDocument : ITextDocument { // ... [XmlIgnore] public string Text {get;set;} [XmlText] public byte[] TextSubstitute { get {return System.Text.Encoding.UTF8.GetBytes(Text);} set {Text = System.Text.Encoding.UTF8.GetString(value);} } } 

这没有经过测试,但你会明白这一点。 您也可以使用[XmlElement]而不是[XmlText],并指定不同的元素名称。