我想将类中的属性序列化为json属性,当反序列化时,我想将其读取到不同的属性。
无法弄清楚如何在json.net中实现这一目标
最小例子:
Backend将特殊格式的json属性转换为数字时间戳(firebase systemtimestamp)。
我想对序列化和反序列化使用相同的抽象基类。
类别:
[JsonObject(MemberSerialization.OptIn)]
public abstract class ItemBase
{
[JsonProperty("timestamp")]
private TimestampModel WriteTimestamp => TimestampModelInstance;
[JsonProperty("timestamp")]
private long ReadTimestamp { get; set; }
public DateTime Timestamp => DateTimeOffset.FromUnixTimeMilliseconds(ReadTimestamp).LocalDateTime;
}
我需要以某种方式将WriteTimestamp
标记为"仅序列化"和ReadTimestamp
为"仅反序列化"
答案 0 :(得分:0)
如果有人发现这有用,我使用自定义JsonConverter
解决了该问题。
这样我只有一个具有读取值类型(long)的类属性,无论实际值如何,它总是序列化为TimestampModelInstance
(特殊的firebase结构)
转换器:
public class TimestampConverter : JsonConverter
{
public override bool CanRead => false;
public override bool CanConvert(Type objectType)
{
return objectType == typeof(TimestampModel);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JObject.FromObject(TimestampModelInstance).WriteTo(writer);
}
}
在课堂上:
[JsonProperty("timestamp")]
[JsonConverter(typeof(TimestampConverter))]
private long NumericTimestamp { get; set; }
public DateTime Timestamp =>
DateTimeOffset.FromUnixTimeMilliseconds(NumericTimestamp).LocalDateTime;