Десериализовать base64 в двумерный массив или в список объектов - PullRequest
0 голосов
/ 29 апреля 2020

Для уменьшения размера выходного файла я сериализирую массив из строки x,y до base64 в конце и передаю строку на сторону клиента, на стороне клиента хочу десериализовать base64 двумерного short[,] массив в JavaScript.
Реализация:

public class DiagnosisSpec
{
    public int Covid { get; set; }
    public int Infection { get; set; }
    public int Other { get; set; }
    public ImagesSpec[] Images { get; set; }
}

[Serializable]
public class Contour
{
    public short X { get; set; }
    public short Y { get; set; }
} 

и ImagesSpec имплементация выглядит следующим образом:

public class ImagesSpec
{
    string _strContour; 
    public int Index { get; set; }
    string GetContourAsBase64()
    {
        Contour[] _contour = (JsonConvert.DeserializeObject<List<short[]>>((string)_strContour) as List<short[]>)
                    .Select(x => new Contour
                    {
                        X = x[0],
                        Y = x[1]
                    }).ToArray();
        byte[] contourByte;
        BinaryFormatter bf = new BinaryFormatter();
        using (var ms = new MemoryStream())
        {
            bf.Serialize(ms, _contour);
            contourByte = ms.ToArray();
        } 
        string contourAsBase64 = Convert.ToBase64String(contourByte); 
        return contourAsBase64;
    }
    public string Contour
    {
        get
        {
            return GetContourAsBase64();
        }
        set
        {
            _strContour = value;
        }
    }
}

есть ли способ десериализации каждого элемента Images до List<Contour> в JavaScript что-то вроде:

result.Images.forEach(function (item, index, arr) { 
    var binary_string = window.atob(item.Contour);
    var len = binary_string.length;
    var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }
    console.log( bytes.buffer ); 
});

base64 строка выглядит так: "AAEAAAD/////AQAAAAAAAAAMAgAAAFVNQVJDTy5XZWIuQXBwbGljYXRpb24uTkdXZWIsIFZlcnNpb249OS44LjY0LjI5NSwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwEAAAAAAQAAADoAAAAEKk1BUkNPLldlYi5BcHBsaWNhdGlvbi5OR1dlYi5Nb2RlbHMuQ29udG91cgIAAAAJAwAAAAkEAAAACQUAAAAJBgAAAAkHAAAACQgAAAAJCQAAAAkKAAAACQsAAAAJDAAAAAkNAAAACQ4AAAAJDwAAAAkQAAAACREAAAAJEgAAAAkTAAAACRQAAAAJFQAAAAkWAAAACRcAAAAJGAAAAAkZAAAACRoAAAAJGwAAAAkcAAAACR0AAAAJHgAAAAkfAAAACSAAAAAJIQAAAAkiAAAACSMAAAAJJAAAAAklAAAACSYAAAAJJwAAAAkoAAAACSkAAAAJKgAAAAkrAAAACSwAAAAJLQAAAAkuAAAACS8AAAAJMAAAAAkxAAAACTIAAAAJMwAAAAk0AAAACTUAAAAJNgAAAAk3AAAACTgAAAAJOQAAAAk6AAAACTsAAAAJPAAAAAUDAAAAKk1BUkNPLldlYi5BcHBsaWNhdGlvbi5OR1dlYi5Nb2RlbHMuQ29udG91cgIAAAASPFg+a19fQmFja2luZ0ZpZWxkEjxZPmtfX0JhY2tpbmdGaWVsZAAABwcCAAAAqADGAAEEAAAAAwAAAKgAxwABBQAAAAMAAACoAMgAAQYAAAADAAAAqADJAAEHAAAAAwAAAKgAygABCAAAAAMAAACpAMYAAQkAAAADAAAAqQDKAAEKAAAAAwAAAKoAxgABCwAAAAMAAACqAMoAAQwAAAADAAAAqwDGAAENAAAAAwAAAKsAxwABDgAAAAMAAACrAMkAAQ8AAAADAAAAqwDKAAEQAAAAAwAAAKwAxwABEQAAAAMAAACsAMgAARIAAAADAAAArADJAAETAAAAAwAAAK4ALAEBFAAAAAMAAACuAC0BARUAAAADAAAArgAuAQEWAAAAAwAAAK4ALwEBFwAAAAMAAACuADABARgAAAADAAAArwArAQEZAAAAAwAAAK8ALAEBGgAAAAMAAACvADABARsAAAADAAAAsAAqAQEcAAAAAwAAALAAKwEBHQAAAAMAAACwAC8BAR4AAAADAAAAsAAwAQEfAAAAAwAAALEAKQEBIAAAAAMAAACxACoBASEAAAADAAAAsQAtAQEiAAAAAwAAALEALgEBIwAAAAMAAACxAC8BASQAAAADAAAAsgAoAQElAAAAAwAAALIAKQEBJgAAAAMAAACyACwBAScAAAADAAAAsgAtAQEoAAAAAwAAALMAKAEBKQAAAAMAAACzACsBASoAAAADAAAAswAsAQErAAAAAwAAALQAKAEBLAAAAAMAAAC0ACkBAS0AAAADAAAAtAAqAQEuAAAAAwAAALQAKwEBLwAAAAMAAAAcAdQAATAAAAADAAAAHAHVAAExAAAAAwAAABwB1gABMgAAAAMAAAAcAdcAATMAAAADAAAAHAHYAAE0AAAAAwAAAB0B1AABNQAAAAMAAAAdAdgAATYAAAADAAAAHgHUAAE3AAAAAwAAAB4B1QABOAAAAAMAAAAeAdgAATkAAAADAAAAHwHVAAE6AAAAAwAAAB8B1gABOwAAAAMAAAAfAdcAATwAAAADAAAAHwHYAAs="

заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...