реализован следующим образом: < /p>
Код: Выделить всё
public class FooAttribute
: Attribute
{
}
Код: Выделить всё
class SampleInt
{
[Foo]
public int Number { get; init; }
public int StandardNumber { get; init; }
public string Text { get; init; }
}
Код: Выделить всё
public class IntJsonConverter
: JsonConverter
{
public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// do whatever before reading if the text starts with "potato". But this should be triggered only if destination type has the Foo attribute. How?
return reader.GetInt32();
}
public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
{
writer.WriteStringValue("potato" + value.ToString());
}
}
< /code>
так, чтобы сериализация для < /p>
var sample =
new SampleInt
{
Number = 123,
StandardNumber = 456
Text = "bar"
};
< /code>
Как это < /p>
var serializeOptions = new JsonSerializerOptions();
var serializeOptions.Converters.Add(new IntJsonConverter());
var resultJson = JsonSerializer.Serialize(sample, serializeOptions);
< /code>
Результаты на следующем json < /p>
{
"number": "potato123",
"standardNumber": 456,
"text": "bar"
}
< /code>
и не в < /p>
{
"number": "potato123",
"standardNumber": "potato456",
"text": "bar"
}
var propertyType = propertyInfo.PropertyType;
var isSimpleValue = propertyType.IsValueType || propertyType == typeof(string);
var isSupportedField = isSimpleValue && hasPersonalDataAttribute;
return isSupportedField;
}
}
< /code>
Но я не хочу использовать Newtonsoft. Я хочу использовать New Dotnet System.text.json [/code] Serializer. Можно ли использовать его аналогичным гранулярным образом?
Подробнее здесь: https://stackoverflow.com/questions/687 ... -field-att