• Как сохранить данные в один бинарный файл?

    AGlassOfWhiskey
    @AGlassOfWhiskey
    Unity Game Developer (c#)
    В рамках данной задачи предлагаю использовать Newtonsoft.
    Установить пакет можно через NuGet в вижле.

    class Program
        {
            const string pathData = @"c:\data.dat";
            static void Main(string[] args)
            {
                WriteData(GenerateData());
                DisplayListData(ReadData());
                Console.ReadLine();
            }
    
            static List<Cell> GenerateData()
            {
                List<Cell> dataCell = new List<Cell>();
                for (int i = 1; i <= 5; i++)
                {
                    int val = i * 10;
                    Cell cell = new Cell()
                    {
                        neighbors = new List<int>() {val, val + 1, val + 2},
                        index = i
                    };
                    dataCell.Add(cell);
                }
                return dataCell;
            }
    
            static void WriteData(List<Cell> dataCell)
            {
                using (StreamWriter file = File.CreateText(pathData))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    serializer.Serialize(file, dataCell);
                }
                Console.WriteLine("Save Data in PATH: " + pathData);
            }
    
            static List<Cell> ReadData()
            {
                using (StreamReader file = File.OpenText(pathData))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    return (List<Cell>) serializer.Deserialize(file, typeof(List<Cell>));
                }
            }
    
            static void DisplayListData(List<Cell> dataList)
            {
                Console.WriteLine(new String('-', 5));
                foreach (var cell in dataList)
                {
                    Console.WriteLine("Cell index: " + cell.index);
                    Console.WriteLine(new String('-', 5));
                    for (int i = 0; i < cell.neighbors.Count; i++)
                    {
                        Console.WriteLine("Value index: " + i + " = " + cell.neighbors[i].ToString());
                    }
                    Console.WriteLine(new String('-', 5));
                }
            }
        }
    
        [Serializable]
        public class Cell
        {
            public List<int> neighbors { get; set; }
            public int index { get; set; }
        }


    Думаю общий принцип понятен.
    Ответ написан
    Комментировать
  • Как сохранить данные в один бинарный файл?

    shai_hulud
    @shai_hulud
    выберите любой из предоставленных ассетов для бинарных форматов и скормите ему ваши классы/списки:
    https://assetstore.unity.com/search?q=bson или
    https://assetstore.unity.com/search?q=messagepack
    Хотя на самом деле JSON местами компактнее BSON, и его тоже можно использовать. JSON.NET неплох. Если нужна мультиплатформа то вот JSON & MessagePack работает везде.

    И не используйте BinaryFormatter, получите много разной боли при смене стуктуры классов, имен, версий. Юнитевский форматтер в JSON не лучше.
    Ответ написан
    Комментировать
  • Как сохранить данные в один бинарный файл?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Создать новый класс со списком клеток и сериализовывать его. Либо вы можете вручную управлять данными и на сериализацию отправлять то те байты, которые включают только одну клетку.

    П.С. Но я бы рекомендовал не изобретать велосипед, а воспользоваться встроенными в юнити ассетами на ScriptableObject.
    Ответ написан
    Комментировать