Ошибка в методе DeserializeObject json? - PullRequest
0 голосов
/ 23 мая 2011

У меня есть класс в моем проекте:

public class ProductType
{
    private string name;
    private Guid id;        

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public Guid Id
    {
        get { return id; }
        set { id = value; }
    }

    public override string ToString()
    {
        return name;
    }

    public ProductType(string Name)
    {
        id = Guid.NewGuid();
        this.name = Name;
    }               

    public ProductType(Guid Id, string Name)
    {
        this.id = Id;
        this.name = Name;
    }       
}

Я пытаюсь десериализовать объект json этого класса, как показано ниже:

strObjJson = "{\"Name\":\"proName\"}";
, используя это:
ProductType deserializedProductType = JsonConvert.DeserializeObject(strObjJson);

Однакопоявляется следующая ошибка:

Unable to find a constructor to use for type `ClassLibraryObjects.ProductType`. A class should either have a default constructor or only one constructor with arguments.

Как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Ну, если ошибка говорит:

Невозможно найти конструктор для использования для типа ClassLibraryObjects.ProductType. класс должен иметь значение по умолчанию конструктор или только один конструктор с аргументами.

Тогда почему бы вам не добавить конструктор без аргументов?

public ProductType()
{
}
1 голос
/ 23 мая 2011

Что означает исключение, так это то, что у вас есть 2 ctors, каждый из которых принимает различное количество аргументов. У вас также нет публичного ctor, который не принимает параметры.

Я заметил, что вы ожидали, что вызывающий будет передан Guid? который я не считаю необходимым. Вы можете изменить код, удалив приведенный ниже код (1) и добавив новый (2)

        // (1) remove this from your code
        public ProductType(string Name)
        {
            id = Guid.NewGuid();
            this.name = Name;
        }

        // (2) add this ctor 
        public ProductType(string Name, Guid id = default(Guid))
        {
            this.id = id;
            this.name = Name;
        }

Это должно сработать. PS: я пробовал код с JavaScriptSerializer из System.Web.Extensions.dll

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...