簡體   English   中英

將類序列化為json作為數組

[英]Serialize class to json as array

使用Json.Net 5.0.5我想序列化此類

[JsonObject(MemberSerialization.OptIn)]
public class RingPoint
{
    public double X { get; set; }

    public double Y { get; set; }

    public RingPoint(double x, double y)
    {
        X = x;
        Y = y;
    }

    [JsonProperty(Required = Required.Always)]
    public double[] Location { get { return new[] { X, Y }; } }

    public bool Equals(RingPoint obj)
    {
        return obj != null && obj.X == X && obj.Y == Y;
    }
}

到這個json格式

{"rings":[[[0.0,0.0],[1.0,0.0],[2.0,0.0],[0.0,0.0]]]}

正常的序列化給了我

{"rings":[[{"Location":[0.0,0.0]},{"Location":[1.0,0.0]},{"Location":[2.0,0.0]},{"Location":[0.0,0.0]}]]}

使用自定義轉換器非常簡單,但是有一種屬性方法可以做到這一點,或者這是何時使用JsonConverter的完美示例

public class RingPointConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteStartArray();
        writer.WriteValue(((RingPoint)value).X);
        writer.WriteValue(((RingPoint)value).Y);
        writer.WriteEndArray();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return null;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof (RingPoint);
    }
}

如果您的類定義不同,則不需要自定義轉換器。 您的課程實際上需要像這樣。

public class rings
{
    List<List<List<double>>> rings;
}

這真令人惡心...但是為了使默認的JsonConverter正確序列化它,您需要在列表內部的列表內部有一個double數組/列表。 我什至不想開始編寫代碼以為其添加值。 順便說一下,數組和列表由JsonConverter處理相同,我選擇使用列表,因為我不知道數組的語法(我認為它不存在)。

無論如何,您的自定義轉換器可能是更好的方法。 更干凈,更有意義。 試圖填充該列表只會讓人頭疼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM