мне было интересно, если кто-то может мне точку в правильном направлении для решения легко следующую задачу:Пользовательские выполнения сериализации членов
Пусть у меня есть класс игрока в моем коде .NET, который выглядит следующим образом:
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
public long Score { get; set; }
}
Мне нужно сериализовать этот класс в строку JSON (используя JSON.NET) и использовать его при отправке в веб-службу. Однако дело в том, что некоторые из конечных точек службы явно запрещают в строке JSON появление определенных членов. Например, конечная точка «post score» позволит включить все три члена в строку, в то время как конечная точка «player player» будет содержать только идентификатор и имя (в противном случае неудачный запрос возвращается клиенту). Теперь я знаю, что могу сделать 2 разных класса (например, Player и CompetitivePlayer), каждый из которых содержит требуемый (дополнительный) набор участников, однако для практических целей предположим, что я не могу этого сделать или хочу избежать этого (мои фактические объекты данных более сложны, чем приведенный здесь класс Player просто как пример).
Так что на самом деле я хочу сказать сериализатору JSON во время выполнения, что в ситуации X должны быть сериализованы только некоторые члены объекта, а в ситуации Y - сериализуемое целое другое подмножество. Сначала я думал, что реализация моего собственного ContractResolver поможет, но, как оказалось, это называется только один раз для типа объекта, а не для самого объекта при его сериализации. Теперь единственным решением, которое я могу придумать, является подкласс JSONSerializer и использовать JSONWriter, который игнорирует свойства, имена которых включены в список строк, заданных как аргумент, возможно, хотя я не совсем уверен, может ли этот план работать. Есть ли более простое решение для того, чего я пытаюсь достичь?
Если ваш ответ является наиболее правильным, вы можете принять свой собственный ответ. – arcain
И ваша щедрость окупилась, так как это именно та ситуация, с которой я столкнулся сегодня. Благодаря! –