• Как работать с Newtonsoft.JsonConvert.PopulateObject()?

    @hello_my_name_is_dany
    Backend Developer (Node.js, PHP, C#)
    К сожалению, PopulateObject в случае списка может только добавлять новые элементы. Можете попробовать реализовать свой Populate, в принципе для этого можно использовать JsonTextReader

    Либо же откажитесь от Populate, сделайте DTO-класс с теми же полями, но nullable, и делайте маппинг руками.

    Что-то типа такого:
    [Serializable]
    public class LevelsConfigDto
    {
        [JsonProperty("version")] public int? Version { get; set; }
        [JsonProperty("levelParams")] public List<LevelParam>? LevelParams { get; set; }
    }
    
    public static void MepLevelsConfig(LevelsConfig target, LevelsConfigDto source)
    {
        if (source.Version != null)
        {
            target.Version = source.Version;
        }
    
        if (source.LevelParam != null)
        {
            var count = Math.Min(target.LevelParam.Count, source.LevelParam.Count);
    
            for (int i = 0; i < count; i++)
            {
                target.LevelParam[i].Steps = source.LevelParam[i].Steps;
                target.LevelParam[i].Complexity = source.LevelParam[i].Complexity;
            }
    
            if (source.LevelParam.Count > target.LevelParam.Count)
            {
                for (int i = target.LevelParam.Count; i < source.LevelParam.Count; i++)
                {
                    target.LevelParam.Add(source.LevelParam[i]);
                }
            }
        }
    }
    Ответ написан
    Комментировать
  • Анимация нормально отображается в Scene View, но глючит в Game View?

    freeExec
    @freeExec
    Участник OpenStreetMap
    В сжатии результирующей текстуры атласа и билинейной фильтрации.
    Ответ написан
    Комментировать
  • Как конвертировать object[] к Class[] где Class пользовательский класс?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Как решить такой трабл явно не приводя массив к нужному типу ?

    Эмм, а как должно это работать? У тебя массив обжектов, а ты ждёшь массив из Class-ов.
    Тебе нужна функция которая будет преобразовывать каждый элемент по отдельности, ибо в этом массиве не обязательно будет лежать Class.
    Может проще сразу массив нужного типа создать?

    Вообще вариантов несколько:
    1. Через Select и некую функцию, которая преобразует объект в твой тип.
    var classes = objects.Select(ConvertObjectToClass).ToArray();

    2. Через метод Cast - тогда просто произойдёт даункаст каждого элемента.
    var classes = objects.Cast<Class>().ToArray();
    3. Через Unsafe, но только если ты заранее знаешь, что внутри этого массива только Class-ы, а не какие-то другие типы, которые с ним не совместимы. Иначе получишь мусор вместо данных. Со структурами, конечно, работать не будет.
    var classes = System.Runtime.CompilerServices.Unsafe.As<Class[]>(objects);

    Вот что кстати будет

    using System.Runtime.CompilerServices;
    var objects = new object[] { new A { x = 1 }, new B { y = 2, z = 3 } };
    var something = Unsafe.As<A[]>(objects);
    Console.WriteLine(something[0].x); // 1
    Console.WriteLine(something[1].x); // 2
    var something2 = Unsafe.As<B[]>(objects);
    Console.WriteLine($"{something2[0].y} {something2[0].z}"); // 1 0
    Console.WriteLine($"{something2[1].y} {something2[1].z}"); // 2 3
    class A
    {
        public int x;
    }
    class B
    {
        public int y;
        public int z;
    }

    А вот если добавить ещё поле - всё совсем поломается.
    Ответ написан
    8 комментариев
  • Как добавить сопровождающего пользователя в приватный github репозиторий?

    ae_ph
    @ae_ph
    I'm a owl )
    Заходите внастройки, нажимаем "Repositories", выбираем нужный, нажимем "0 collaborators" а дальше тыкаем на кнопку "Add people"
    Это для наглядности всем другим кто ищет.
    623282c5bcd3b823747306.png
    623282cf424a8907670135.png
    623282d5eff5f497289962.png
    Ответ написан
    3 комментария