我在项目中上课:
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.
我该如何修复?
答案 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
代码