【发布时间】:2016-08-03 12:10:02
【问题描述】:
我对反序列化 json 对象没什么问题。 我的 json 来自 http url:
我不知道如何反序列化以动态创建按钮。我知道如何使用文本创建按钮,但我不知道如何使用它们拥有的选项来制作它们。我尝试在 Windows 窗体应用程序中获取这些选项进行测试,但应用程序会崩溃。谢谢你的帮助。
【问题讨论】:
标签: c# json serialization xamarin.android
我对反序列化 json 对象没什么问题。 我的 json 来自 http url:
我不知道如何反序列化以动态创建按钮。我知道如何使用文本创建按钮,但我不知道如何使用它们拥有的选项来制作它们。我尝试在 Windows 窗体应用程序中获取这些选项进行测试,但应用程序会崩溃。谢谢你的帮助。
【问题讨论】:
标签: c# json serialization xamarin.android
你的类应该是这样的:
public class Type
{
public int id { get; set; }
public string name { get; set; }
public bool closedQuestion { get; set; }
public bool multiAnswer {get; set;}
public bool usesImage {get; set; }
}
public class RootObject
{
public int id { get; set; }
public string name { get; set; }
public Type type { get; set; }
public List<string> options { get; set; }
}
然后您应该能够使用 Newtonsoft.Json 反序列化您的 json:
List<RootObject> myData = JsonConvert.DeserializeObject<List<RootObject>>(json);
【讨论】:
var obj = JsonConvert.DeserializeObject(json);
您还可以创建配对类并使用泛型:
public JsonClass {
// Do this for each property you want to map.
[JsonProperty(PropertyName="id")]
public int Id { get; set; }
[JsonProperty(PropertyName="name")]
public int Name { get; set; }
[JsonProperty(PropertyName="type")]
public MessageType Message { get; set; }
}
public class MessageType {
[JsonProperty(PropertyName="id")]
public int Id { get; set; }
// etc...
}
然后做:
JsonClass obj = JsonConvert.DeserializeObject<JsonClass>(json);
MessageType messageType = obj.Message;
【讨论】:
[JsonProperty(PropertyName="XXX")] 属性放在每个属性上方。 XXX 替换为值的 JSON 名称。所以,对于这个 JSON 字符串:{ name: "Nick", age: "21" },我们会得到这个:[JsonProperty(PropertyName="name")] 上面的 public string Name { get; set; }。
JsonConvert 到 Deserialize 到创建类
Edit > Paste Special > Paste JSON (or XML) As Classes(假设您在 .cs 文件中)。 我以前怎么不知道这个?! 看到这个链接:visuallylocated.com/post/2015/10/05/…