将 JSON 字符串反序列化为 C# 复杂 class 对象
Deserialize JSON string into a C# complex class object
如果 class 由简单的 JSON 兼容类型组成,MyClass obj = JsonConvert.DeserializeObject<MyClass>(JSONtext);
做得很好。如果 MyClass
包含 enum
或 struct
属性,则 DeserializeObject<>
方法 returns 为空。我目前正在遍历反序列化为 JObject 的 JSON 响应,将值分配给创建的内部 class,然后返回它。有没有更好的方法将 JSON 字符串反序列化为异构 class 对象?
class MyClass
{
public Int32 wishlistID;
public Basket currentBasket; //struct
public List<Int32> items;
public dStatus _dStatus; //enum
}
编辑:结果是,出于某种原因,所有Basket
的属性都有private
修饰符;当然无法访问它们,因此结果为 null
。将其切换为 public
就可以了。
您的成员必须 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);
编辑:
所以在我们完成了 public 之后你声称 structs\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);
如果 class 由简单的 JSON 兼容类型组成,MyClass obj = JsonConvert.DeserializeObject<MyClass>(JSONtext);
做得很好。如果 MyClass
包含 enum
或 struct
属性,则 DeserializeObject<>
方法 returns 为空。我目前正在遍历反序列化为 JObject 的 JSON 响应,将值分配给创建的内部 class,然后返回它。有没有更好的方法将 JSON 字符串反序列化为异构 class 对象?
class MyClass
{
public Int32 wishlistID;
public Basket currentBasket; //struct
public List<Int32> items;
public dStatus _dStatus; //enum
}
编辑:结果是,出于某种原因,所有Basket
的属性都有private
修饰符;当然无法访问它们,因此结果为 null
。将其切换为 public
就可以了。
您的成员必须 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);
编辑:
所以在我们完成了 public 之后你声称 structs\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);