Мой пример выше находит всего два значения в массиве, но чтобы их получить надо перебрать 21 итерацию цикла (пройтись от 0 до 20).
В данный момент я пишу бинарную сериализацию (бинарный TCP протокол), и мне надо иметь аналог из C# типа Dictionary<byte,object>. Т.к. js уже имеет разреженные массивы из коробки, то мне хотелось их использовать для этой задачи. Свойство мне нужно, чтобы указать сериализатору, что данный массив надо сериализовать как коллекцию Dictionary<byte,object>. Собственно мой пример выше решает задачу, но вдруг есть решение оптимальнее.
Сейчас я это делаю так:
var object = {} //объект для сериализации
// сериализует как массив байтов
object.arrayUInt8 = [1,2,255];
object.arrayUInt8.elementType = 'UInt8';
// сериализует как ассоциативный массив с ключем типа UInt8
object.arrayByteProps = [];
object.arrayByteProps[10] = [1,2,3,4,5];
object.arrayByteProps[20] = {prop:12345};
object.arrayByteProps.elementType = 'ByteProps';
object.v3 = new Vector3();
var dBuff = new DynamicBuffer();
BinarySerializer.serialize(object, dBuff);
Со стороны C# я могу сейчас слать вот такие пакеты:
client.Send(new int[] { 1, 2, 3, 4, 5 });
client.Send(new string[] { "5", "4", "3", "2", "1" });
client.Send(new object[] { "5", null, 3, true, 1.1f, "привет!", new Vector3(5,3,1) });
client.Send(new Dictionary<string, object> { { "123", 123 }, { "Hi", "Привет" } });
client.Send(new Dictionary<byte, object> { { 10, 123 }, { 20, "Привет" } });