Преобразование C# XML в документ Fast-Infoset неожиданно обрезает пробелы и символы CR

Мне нужно закодировать обычный XML-файл в XML-документ Fast Infoset. В пакете Nuget я установил пакет LiquidTechnologies.FastInfoset (единственный, который я нашел)

Мой документ XML для преобразования, как показано ниже

      <?xml version="1.0" encoding="utf-8"?> <GomsStockRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" callerMethod="pushInfinityAllocatedStockLevel" transactionType="InventoryJob"> <stockRequestEntry> <productCode>100001</productCode>     <availableQuantity>1</availableQuantity>     <reservedQuantity>0</reservedQuantity>     <inventoryType>Job_Import</inventoryType>   </stockRequestEntry> </GomsStockRequest>

После transactionType="InventoryJob"> и перед дочерними элементами есть символы CR LF и пробелы. Моя целевая система использует Java, и они могут читать документы Fast Infoset, закодированные с помощью Java, следующим образом:

      à  � xÏ�xsi(http://www.w3.org/2001/XMLSchema-instanceÏ�xsd�http://www.w3.org/2001/XMLSchemað<�GomsStockRequestx�callerMethodH�pushInfinityAllocatedStockLevelx�transactionTypeH�InventoryJobð’  <�stockRequestEntry’� < productCode’�100001ð’�     <�availableQuantity�1ð£<�reservedQuantity�0ð£<inventoryType’�Job_Importð’�   ð� ÿ

который сохранил пробелы и, возможно, просто проигнорировал символ CR.

Однако для меня, используя С#, результат после записи документа Fast Infoset выглядит следующим образом:

      à  � xÏ�xsi(http://www.w3.org/2001/XMLSchema-instanceÏ�xsd�http://www.w3.org/2001/XMLSchemað<�GomsStockRequestx�callerMethodH�pushInfinityAllocatedStockLevelx�transactionTypeH�InventoryJobð<�stockRequestEntry< productCode’�100001ð<�availableQuantity�1ð<�reservedQuantity�0ð<inventoryType’�Job_Importÿ

что кажется, что пробел и символ CR обрезаны

Мои модели ниже

      public class GomsStockRequest
    {
        [XmlAttribute("callerMethod")]
        public string callerMethod { get; set; }

        [XmlAttribute("transactionType")]
        public string transactionType { get; set; }
        public StockRequestEntry stockRequestEntry { get; set; }
    }

    public class StockRequestEntry
    {
        public string productCode { get; set; }
        public int availableQuantity { get; set; }
        public int reservedQuantity { get; set; }
        public string inventoryType { get; set; }

    }

Программа следующая:

      var gomsstockrequest = new GomsStockRequest()
            {
                callerMethod = "pushInfinityAllocatedStockLevel",
                transactionType = "InventoryJob",
                stockRequestEntry = new StockRequestEntry()
                {
                    productCode = "100001",
                    availableQuantity = 1,
                    reservedQuantity = 0,
                    inventoryType = "Job_Import"
                    
                }
            };

var serializer = new XmlSerializer(typeof(GomsStockRequest));
XmlWriter fwriter = XmlWriter.Create(new FIWriter("fiGomsStockRequest.xml"));
            serializer.Serialize(fwriter, gomsstockrequest);

У кого-нибудь есть опыт в этой кодировке?

Когда я просматриваю данные в Notepad++, разница такая же, как на скриншоте.

Пожалуйста, порекомендуйте. Спасибо

1 ответ

При использовании LiquidTechnologies.FastInfoset незначительные пробелы игнорируются при кодировании XML-данных как FastInfoset, поскольку они не имеют практического значения.

У FI Encoder нет возможности включить кодирование незначащих пробелов.

Если вам нужен форматированный XML-документ, вы можете отформатировать XML-данные после того, как они были декодированы FI с использованием классов Microsoft .Net Framework Xml.

Другие вопросы по тегам