public void WriteToJson(Newtonsoft.Json.JsonWriter writer)
        {
            writer.WriteStartObject();

            writer.WritePropertyName("title_1");
            writer.WriteValue(Title.Length > 0 ? Title[0] : "");

            writer.WritePropertyName("title_2");
            writer.WriteValue(Title.Length > 1 ? Title[1] : "");

            writer.WritePropertyName("colour");
            if (Color == null)
            {
                new RgbColor(255, 255, 255).WriteToJson(writer);
            }
            else
            {
                Color.WriteToJson(writer);
            }

            writer.WritePropertyName("weight");
            writer.WriteValue(Weight);

            // Write descriptions
            for (int i = 0; i < Description.Length; i++)
            {
                writer.WritePropertyName("description_" + (i + 1));
                writer.WriteValue(Description[i]);
            }
            for (int i = Description.Length; i < 10; i++)
            {
                writer.WritePropertyName("description_" + (i + 1));
                writer.WriteValue("");
            }

            writer.WritePropertyName("preview_scale");
            writer.WriteValue(PreviewScale);

            // Write preview offset if not default
            if (PreviewOffset != NoOffset && (PreviewOffset != null && PreviewOffset.Length == 3))
            {
                writer.WritePropertyName("preview_offset");
                writer.WriteStartObject();
                writer.WritePropertyName("x");
                writer.WriteValue(PreviewOffset[0]);
                writer.WritePropertyName("y");
                writer.WriteValue(PreviewOffset[1]);
                writer.WritePropertyName("z");
                writer.WriteValue(PreviewOffset[2]);
                writer.WriteEndObject();
            }

            writer.WriteEndObject();
        }