У меня есть простой класс, например, так:переменного класс Instantiate в конструкторе этого класса
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public MyClass(string Json)
{
}
}
Если класс экземпляра без параметров, она просто возвращает пустой объект .. Однако, когда я прохожу строка JSON для конструктора, я хотел бы установить все свойства, равные их значению в JSON.
Я сделал это за пределами класса, используя Json.NET по Newtonsoft, как это:
string JsonArray = Base64.Decode(HttpContext.Current.Request.QueryString["songinfo"]);
MyClass tmp = JsonConvert.DeserializeObject<MyClass>(JsonArray);
MyClass InstantiatedClass = tmp;
InstantiatedClass теперь полностью заселена объект .. Но я хотел бы, чтобы добиться этого в самом конструкторе , но я не могу понять, как это сделать.
Я пробовал такие вещи, как установка this = JsonConvert.DeserializeObject<MyClass>(Json)
, но, конечно, this
доступен только для чтения.
Я знаю, что смогу это сделать, проанализировав Json и установив каждую переменную равной соответствующему значению атрибута JSON, но я бы хотел сделать это так, потому что он чище.
Конечно, если 'MyClass' был' struct', ваш подход с 'this = JsonConvert.DeserializeObject (Json);' работал бы. –
Единственный способ сделать это - создать второй экземпляр внутри конструктора, а затем использовать отражение для клонирования всех свойств. Статические заводские методы, упомянутые в ответах, являются следующим лучшим по сравнению с тем, что вы просите, и даже лучшим/чистым решением. – Mark
У меня нет ответа на ваш вопрос, и кажется, что у вас уже есть некоторые, но я хотел исправить вашу терминологию. Вы не создаете переменные. Единственное, что вы можете создать, это тип, создавая объект такого типа. То, что вы хотите сделать, это «инициализировать» эти переменные, с объектом, который является экземпляром типа. – jmcilhinney