Мне нужно изменить существующий тип свойства модели с string на List<string>.
Поскольку в моей базе данных уже есть несколько экземпляров такой модели со строковым свойством, я хотел бы найти способ прочитать это свойство:
Я на .NET Core 6, и я считаю, что мои два варианта
Каков наилучший способ добиться этого?





В .NET вы можете определить метод, который обрабатывает пользовательскую десериализацию/сериализацию.
V3 SDK использует Newtonsoft, поэтому я буду использовать его в качестве примера, вы можете реализовать JsonConverter (https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm).
public class MyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(List<string>);
}
// Used for serializing, if true, override WriteJson
public override bool CanWrite { get { return false; }}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
JToken itemsJToken = JToken.Load(reader);
if (itemsJToken.Type == JTokenType.String)
{
return new List<string>(){ itemsJToken.Value<string>() };
}
else // assuming it can only be an array
{
return itemsJToken.ToObject<List<string>>(serializer);
}
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanWrite is false. The type will skip the converter.");
}
}
public class MyType
{
/* other properties */
[JsonConverter(typeof(MyConverter))]
public List<string> Items {get;set;}
}
Красивый! Это именно то, что я искал
Можете ли вы уточнить, какой язык вы используете и что вы пробовали?