Сохранить \ n в сериализации Xml в C # - PullRequest
0 голосов
/ 23 октября 2019

У меня есть класс с некоторыми полями, как, например,

public class Abc
{
  private String text;

  public String Text
  {
    get { return this.text; }
    set { this.text = value; }
  }
}

Хранимая процедура возвращает объект, и мне нужно сериализовать его в строку XML, чтобы отобразить его в файле XSL. Я сериализую объект с помощью этого метода

   public static String SerializeObject(Object pObject)
    {
        try
        {
            String XmlizedString = null;
            MemoryStream memoryStream = new MemoryStream();
            XmlSerializer xs = new XmlSerializer(pObject.GetType());

            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.Unicode);

            xs.Serialize(xmlTextWriter, pObject);
            memoryStream = (MemoryStream) xmlTextWriter.BaseStream;
            XmlizedString = UTF16ByteArrayToString(memoryStream.ToArray());

            return XmlizedString.Trim();
        }
        catch (Exception e)
        {
            return null;
        }
    }

Если свойство Text моего объекта содержит несколько символов новой строки \ n, при сериализации они удаляются и заменяются пробелом. Как я могу сохранить символы новой строки после сериализации? Спасибо

1 Ответ

0 голосов
/ 29 октября 2019

Я попытался изменить подход, как я видел в этом ответе, я определил шаблон для вызова внутри моего XSL-файла:

  <xsl:template name="replaceNL">
    <xsl:param name="pText"  select="string(.)"/>

      <xsl:choose>
        <xsl:when test="contains($pText, '&#xA;')">
          <xsl:value-of select="substring-before($pText, '&#xA;')"/>
          <br />
          <xsl:call-template name="replaceNL">
            <xsl:with-param name="pText" select="substring-after($pText, '&#xA;')"/>
          </xsl:call-template>
       </xsl:when>
       <xsl:otherwise>
         <xsl:value-of select="$pText"/>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>

В моем XSL я вызываю шаблон втаким образом:

         <tr>
          <td colspan="4">
            <p style="padding-left:5px">
              <xsl:call-template name="replaceNL">
                <xsl:with-param name="pText" select="Contract/ContractDetail/DESC_NOTE"></xsl:with-param>

              </xsl:call-template>

            </p>
          </td>
        </tr>

В моей строке, которую я передал XSL, у меня может быть текст таким образом: <DESC_NOTE>daFfF&#xA;ASFAFA&#xA;FGAGA</DESC_NOTE> Но в выводе я не вижу изменений, примененных шаблоном, inteadЯ вижу текст как «daFfF br / ASFAFA br / FGAGA», как будто тег br / является частью текста. Чего мне не хватает?

...