将JSON字符串反序列化为C#复杂类对象

时间:2015-01-25 11:00:15

标签: c# json json.net deserialization

如果该类包含简单的JSON兼容类型,MyClass obj = JsonConvert.DeserializeObject<MyClass>(JSONtext); 做得很好。如果MyClass包含enumstruct属性,则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就可以了。

1 个答案:

答案 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);