-1

如何序列化一个类with Newtonsoft.Json.JsonConvert.SerializeObject 以将空列表更改为空变量

我的序列化结果

{"images":[]} or {"images":{}}

并想得到

{"images":null}

我的简单课

public class Images
{
[JsonProperty("images", Required = Required.Always, NullValueHandling = NullValueHandling.Include)]

   public Images()
   {
   Parameters = new Parameters(); **//  I know I could not initiate here only when I need it but I don't want to do it**
   }

   [JsonProperty("parameters", Required = Required.Always, NullValueHandling = NullValueHandling.Include)]
   public Parameters Parameters { get; set; }
}

public class Parameters 
{
   [JsonProperty("id", Required = Required.AllowNull, NullValueHandling = NullValueHandling.Include)]
   public string Id { get; set; }
}
4

1 回答 1

0

我做了类似的事情

           internal class NullEmptyConverter : JsonConverter
        {
            public override bool CanConvert(Type t) => t == typeof(GuidId);
            public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
            {
                if (reader.TokenType == JsonToken.Null) return null;
                var value = serializer.Deserialize<string>(reader);
                return value;
            }
            public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
            {
                if (JsonConvert.SerializeObject(untypedValue, Formatting.None).ToString() == "[]")
                {
                    serializer.Serialize(writer, null);
                    return;
                }

                if (JsonConvert.SerializeObject(untypedValue, Formatting.None).ToString() == "{}")
                {
                    serializer.Serialize(writer, null);
                    return;
                }

                serializer.Serialize(writer,untypedValue);
                return;
            }
        }

利用    

 [JsonConverter (typeof (NullEmptyConverter))]

就在之前

public Parameters Parameters { get; set; }

它有效,但也许它可以做得更好,更简单或其他地方有问题?

于 2019-10-15T18:54:05.667 回答