C# - Как написать пользовательский сериализатор JSON, который меняет свойства на основе атрибутаC#

Место общения программистов C#
Ответить
Anonymous
 C# - Как написать пользовательский сериализатор JSON, который меняет свойства на основе атрибута

Сообщение Anonymous »

У меня есть класс Poco, содержащий PersonalData, например: < /p>

Код: Выделить всё

public class UserInfo
{
[PersonalData]
public string Name { get; set; }

[PersonalData]
public string Address { get; set; }

[PersonalData]
public DateTime Dob { get; set; }

public bool IsActive { get; set; }
}
< /code>
У меня есть много сценариев I сериализуйте этот объект, и я хотел бы сделать, чтобы маскировать данные PII, подобные этой «****», во время процесса сериализации-я сериализую это, чтобы написать, например, в журнале. < /p>
public class PersonalDataSerializer : JsonConverter
where T: new()
{
public override bool CanConvert(Type typeToConvert)
{
return typeToConvert.HasPiiData();
}

public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// read here...
throw new NotImplementedException();
}

public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
// write here...
throw new NotImplementedException();
}
}
Я не уверен, как реализовать метод записи, просто не выполняя нормальную сериализацию, а затем пытаясь выработать свойства с атрибутом и выполнять какую -то манипуляцию строк. Атрибут: < /p>

Код: Выделить всё

public static class TypeExtensions
{
public static bool HasPiiData(this Type type)
{
return type.GetProperties().Any(p => p.IsPiiData());
}

public static bool IsPiiData(this PropertyInfo prop)
{
foreach (var att in prop.CustomAttributes)
{
if (att.AttributeType == typeof(PersonalDataAttribute))
{
return true;
}
if (att.AttributeType.Name.Contains("PersonalData"))
{
return true;
}
}

return false;
}
}
Любые советы о том, как реализовать пользовательскую сериализацию на основе атрибута, были бы очень оценены:-)


Подробнее здесь: https://stackoverflow.com/questions/648 ... s-based-on
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»