如果该类包含简单的JSON兼容类型,MyClass obj = JsonConvert.DeserializeObject<MyClass>(JSONtext);
做得很好。如果MyClass
包含enum
或struct
属性,则DeserializeObject<>
方法将返回null。我正在迭代反序列化为JObject的JSON响应,为创建的内部类赋值,并返回它。有没有更好的方法将JSON字符串反序列化为异构类对象?
class MyClass
{
public Int32 wishlistID;
public Basket currentBasket; //struct
public List<Int32> items;
public dStatus _dStatus; //enum
}
修改:事实证明,出于某种原因,所有Basket
的属性都有private
修饰符;当然,他们无法访问,因此导致null
。将其切换为public
就可以了。
答案 0 :(得分:4)
您的会员必须public
才能实现此目的。
不有效:
public class MyClass
{
Int32 a;
string b; //struct
}
string json = "{ a: 7, b:'abc' }";
MyClass cc = JsonConvert.DeserializeObject<MyClass>(json);
确实工作:
public class MyClass
{
public Int32 a;
public string b; //struct
}
string json = "{ a: 7, b:'abc' }";
MyClass cc = JsonConvert.DeserializeObject<MyClass>(json);
修改
因此,在我们通过公共内容后,您声称结构\ enums 不通过。
这是他们做的例子:
public class MyClass
{
public Int32 a;
public test b;
public eMyEnum c;
}
public struct test
{
public string str;
}
public enum eMyEnum
{
A = 0,
B
}
string json = "{ a: 7, b: {str:'str'}, c: 'B' }";
MyClass cc = JsonConvert.DeserializeObject<MyClass>(json);