我试图从Json对象获取所有形成的值,如下所示: http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=4798
我尝试了几个库,但没有一个按照我想要的方式生成。我想将值放入特定的Datamembers。
这是我的最后一次尝试,它运行但似乎我的Datamembers没有获得任何值。
namespace JSON_Data
{
public partial class Form1 : Form
public Form1()
{
InitializeComponent();
string jsonString = @"{""item"":{""icon"":""http://services.runescape.com/m=itemdb_rs/4996_obj_sprite.gif?id=4798"",""icon_large"":""http://services.runescape.com/m=itemdb_rs/4996_obj_big.gif?id=4798"",""id"":4798,""type"":""Ammo"",""typeIcon"":""http://www.runescape.com/img/categories/Ammo"",""name"":""Adamant brutal"",""description"":""Blunt adamantite arrow...ouch"",""current"":{""trend"":""neutral"",""price"":305},""today"":{""trend"":""neutral"",""price"":0},""members"":""true"",""day30"":{""trend"":""positive"",""change"":""+2.0%""},""day90"":{""trend"":""positive"",""change"":""+8.0%""},""day180"":{""trend"":""positive"",""change"":""+23.0%""}}}";
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Item));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
Item obj = (Item)ser.ReadObject(stream);
}
}
}
这就是我的课程“Item”看起来
namespace JSON_Data
{
[DataContract]
public class Item
{
[DataMember]
public string Icon { get; set; }
[DataMember]
public string Icon_large { get; set; }
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public string Members { get; set; }
}
}
答案 0 :(得分:2)
如果您可以尝试 Newtonsoft ,我可以提供一种方式..就我认为而言,它是非常好的和更好的方法
var ob = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);
Item a = ((JObject)ob["item"]).ToObject<Item>();
答案 1 :(得分:-1)
您可以在C#中使用多个JSON序列化程序。一些具有更好的性能,一些具有更好的容错性,而另一些具有循环参考处理。
在你的情况下,我看到你只想要一个对象,而不是在任何地方传递它(到WCF)。您可以按照此问题的第二个答案:Deserialize JSON into C# dynamic object?从该答案复制的示例代码:
compile *.c program
C#中的动态对象允许您在不声明类的情况下读取属性。