简体   繁体   English

序列化一个锯齿状数组,并保存为 JSON

[英]Serialise a Jagged Array, and save as JSON

I would like to save a simple jagged array as an XML, but I can't seem to understand the guides I've seen online.我想将一个简单的锯齿状数组保存为 XML,但我似乎无法理解我在网上看到的指南。 I wish to save rawJagged as JSON:我希望将rawJagged保存为 JSON:

string[][] rawJagged = new string[2][];
rawJagged[0] = new string[1] { "turret idle" };
rawJagged[1] = new string[9] { "turret idle", "turret left kickback 0", "turret left kickback 1", "turret left kickback final", "turret left return 0", "turret left return 1", "turret left return 2", "turret left return 3", "turret left return final" };

The array is just string references to use by a SpriteAtlas in Unity, but my problem is purely C# right now.该数组只是 Unity 中 SpriteAtlas 使用的字符串引用,但我的问题现在纯粹是 C#。 I wish to use JSON so I can use this as a template file and modify it within Notepad++ as needed.我希望使用 JSON 所以我可以将其用作模板文件并根据需要在 Notepad++ 中对其进行修改。

I... I do not know if I'm being helpful here because this seems too easy XD我...我不知道我是否在这里有所帮助,因为这似乎太容易了 XD

But running the following code:但运行以下代码:

string[][] rawJagged = new string[2][];
rawJagged[0] = new string[1] { "turret idle" };
rawJagged[1] = new string[9] { "turret idle", "turret left kickback 0", "turret left kickback 1", "turret left kickback final", "turret left return 0", "turret left return 1", "turret left return 2", "turret left return 3", "turret left return final" };

Console.WriteLine(JsonConvert.SerializeObject(rawJagged));

Gives me:给我:

[
   [
      "turret idle"
   ],
   [
      "turret idle",
      "turret left kickback 0",
      "turret left kickback 1",
      "turret left kickback final",
      "turret left return 0",
      "turret left return 1",
      "turret left return 2",
      "turret left return 3",
      "turret left return final"
   ]
]

Which ofcourse can be read back in:其中当然可以读回:

string[][] rawJagged = new string[2][];
rawJagged[0] = new string[1] { "turret idle" };
rawJagged[1] = new string[9] { "turret idle", "turret left kickback 0", "turret left kickback 1", "turret left kickback final", "turret left return 0", "turret left return 1", "turret left return 2", "turret left return 3", "turret left return final" };


string serialized = JsonConvert.SerializeObject(rawJagged);
var deserialized = JsonConvert.DeserializeObject<string[][]>(serialized);

Console.WriteLine(deserialized[1][4]);

Which outputs:哪个输出:

turret left return 0

Ofcourse this does use the Newtonsoft json package for de/serialization.当然,这确实使用 Newtonsoft json package 进行反序列化。

I hope I have helped:)我希望我有帮助:)

got it working like so:让它像这样工作:

using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
"turret left kickback 1", "turret left kickback final", "turret left return 0", "turret left return 1", "turret left return 2", "turret left return 3", "turret left return final" });

namespace fork
{
    class Program
    {
        public static List<List<string>> rawJagged;

        static void Main()
        {
            //sample data:
            //rawJagged = new List<List<string>>();
            //rawJagged.Add(new List<string> { "turret idle" });
            //rawJagged.Add(new List<string> { "turret idle", "turret left kickback 0", 
            while (true)
            {
                if (Console.ReadKey(true).Key == ConsoleKey.S)
                {
                    Save();
                }
                else if (Console.ReadKey(true).Key == ConsoleKey.L)
                {
                    Load();
                }
                else if (Console.ReadKey(true).Key == ConsoleKey.D)
                {
                    Delete();
                }
            }

        }
        static void Save()
        {
            string json = JsonConvert.SerializeObject(rawJagged);
            File.Delete(@"C:\Users\Artin\Desktop\test.json");
            System.IO.File.WriteAllText(@"C:\Users\Artin\Desktop\test.json", json);
            Console.WriteLine("saved.");
        }
        static void Load()
        {
            string json = System.IO.File.ReadAllText(@"C:\Users\Artin\Desktop\test.json");
            rawJagged = JsonConvert.DeserializeObject<List<List<string>>>(json);
            Console.WriteLine("loaded.");
        }
        static void Delete()
        {
            File.Delete(@"C:\Users\Artin\Desktop\test.json");
            Console.WriteLine("deleted.");
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM