кодирование массива байтов в Hex при сериализация Xml
при сериализации массива байтов XmlSerializer автоматические кодирует его в base64, можно ли как-то поменять на Hex?
XmlSerializer xml = new XmlSerializer(typeof(iq));
var doc = new XmlDocument();
MemoryStream ms = new MemoryStream();
xml.Serialize(ms, this);
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Это можно сделать множеством разных способов. Например, так:
using System.Xml.Serialization;
XmlSerializer xml = new XmlSerializer(typeof(Test));
var test = new Test { Arr = new byte[] { 121, 121, 123, 124, 125 } };
using (var outStream = new FileStream("test.txt", FileMode.Create))
{
xml.Serialize(outStream, test);
xml.Serialize(Console.Out, test);
Console.WriteLine();
}
using (var inStream = new FileStream("test.txt", FileMode.Open))
{
var test2 = (Test)xml.Deserialize(inStream);
Console.WriteLine(string.Join(",", test2.Arr));
}
public class Test
{
[XmlIgnore]
public byte[]? Arr { get; set; }
public string ArrHex
{
get { return Convert.ToHexString(Arr); }
set { Arr = Convert.FromHexString(value); }
}
}
Массив байтов помечаем атрибутом [XmlIgnore], чтобы сериализатор его не замечал, а (де)сериализуем другое свойство с конвертацией значения.
Если постороннее свойство нежелательно иметь, то следует сделать дополнительный тип DTO и (де)сериализовать его.