Я извлекаю данные из API, который позволяет настраивать поля, что приводит к изменению структуры ответа JSON для различных вызовов API. Я использую RestSharp / Simple JSON для десериализации JSON в объект, определенный в моем проекте. Мои пользователи могут настроить свои учетные записи так, чтобы они извлекали свои собственные настраиваемые поля, но моя проблема в том, что я не могу десериализовать новые настраиваемые поля в свой объект без добавления этого свойства в класс, перекомпиляции и развертывания изменений. У кого-нибудь есть идеи, как я мог получить доступ к этому новому настраиваемому полю, не добавляя свойство в класс и не перераспределяя его? Примеры ниже ...
определение
public class UserFields
{
public string Username {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string GradeCustomFieldName {get;set;}
public string CustomfieldABC {get;set;} //user ABC's custom field for "grade"
public string CustomfieldXYZ {get;set;} //user XYZ's custom field for "grade"
public string CustomfieldLMNO {get;set;} //user LMNO's custom field for "grade"
public string CustomfieldASDF {get;set;} //user ASDF's custom field for "grade"
public string UserGrade
{
string grade = this.GetType().GetProperty(this.gradeCustomFieldName).GetValue(this);
}
...
}
использование
UserFields userFields = SimpleJson.DeserializeObject<UserFields>(jsonResponse);
string userGrade = userFields.UserGrade;
json ответ для клиента AB C
{
"Username": "bobslydale",
"FirstName": "bob",
"LastName": "slydale",
"GradeCustomFieldName": "CustomfieldABC",
"CustomfieldABC": "A"
}
json ответ для клиента XYZ
{
"Username": "bobslydale",
"FirstName": "bob",
"LastName": "slydale",
"GradeCustomFieldName": "CustomfieldXYZ",
"CustomfieldXYZ": "C"
}
Моя проблема заключается в том, что, когда OIU клиента добавляется и его GradeCustomFieldName имеет значение CustomfieldOIU, я должен добавить его в определение своего класса, прежде чем они смогут использовать приложение.