DeserializeObject方法json出错?

时间:2011-05-23 07:21:38

标签: asp.net json

我在项目中上课:

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 个答案:

答案 0 :(得分:3)

好吧,如果错误说明:

  

无法找到要使用的构造函数   对于类型   ClassLibraryObjects.ProductType。一个   class应该有一个默认值   构造函数或只有一个构造函数   带参数。

那么为什么不添加没有参数的构造函数呢?

public ProductType()
{
}

答案 1 :(得分:1)

异常的含义是 - 你有两个ctors,每个ctors采取不同数量的args。你也没有没有参数的公共ctor。

我注意到你期待Guid被来电者传递?我认为没有必要。 您可以通过删除下面的ctor(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代码