Как сериализовать класс с Newtonsoft.Json.JsonConvert.SerializeObject, чтобы изменить пустой список на пустую переменную - PullRequest
0 голосов
/ 10 октября 2019

Как сериализовать класс 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; }
}

1 Ответ

0 голосов
/ 15 октября 2019

Я сделал что-то подобное

           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; }

Это работает, но, возможно, это можно сделать лучше, прощеили где-то еще что-то здесь не так?

...