如何将json反序列化为c中的对象#
无法将json反序列化为对象。尝试使用DataContractJsonSerializer。
这是我如何使用它
不知道如何应付呢..
CLASS如何将json反序列化为c中的对象#
[Serializable]
public class user
{
public user() { }
public user(string _uid, string _first_name, string _last_name, string _online)
{
this._uid = _uid;
this._first_name = _first_name;
this._last_name = _last_name;
this._online = _online;
}
string _uid;
string _first_name;
string _last_name;
string _online;
[DataMember]
public string uid
{
get { return _uid; }
set { _uid = value; }
}
[DataMember]
public string first_name
{
get { return _first_name; }
set { _first_name = value; }
}
[DataMember]
public string last_name
{
get { return _last_name; }
set { _last_name = value; }
}
[DataMember]
public string online
{
get { return _online; }
set { _online = value; }
}
}
DataContractJsonSerializer使用
WebRequest w = WebRequest.Create(string.Format("https://api.vk.com/method/friends.get?uid=6631031&fields=uid,first_name,last_name&access_token={0}",_accesstoken));
Stream stream = w.GetResponse().GetResponseStream();
//StreamReader sread = new StreamReader(stream);//here i can get the result into a string
//string sLine = sread.ReadLine(); //to make sure the result is valid json
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(user[]));
var result = (user[]) json.ReadObject(stream);
比如我的JSON
"{\"response\":[{\"uid\":779358,\"first_name\":\"Dark\",\"last_name\":\"Knight\",\"online\":0},{\"uid\":1023931,\"first_name\":\"Екатерина\",\"last_name\":\"Гаврилова\",\"online\":0},{\"uid\":2475856,\"first_name\":\"Даша\",\"last_name\":\"Матвеева\",\"online\":0},......]}"
你可以定义包含为了user[]
类型的response
属性包装对象,以反映您的JSON结构:
[DataContract]
public class Result
{
[DataMember]
public user[] response { get; set; }
}
然后:
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Result));
Result result = (Result)json.ReadObject(stream);
user[] users = result.response;
现在就试试吧.. – user1200752 2012-02-09 22:16:26
@Dimitrov,我试过了。在结果结果=(结果)json.ReadObject(stream);有一个异常SerializationException。数据协定类型“wpfapp3.mainwindow + user”无法反序列化,因为找不到所有必需的数据元素“_first_name,_last_name,_online,_uid”。对于描述 – user1200752 2012-02-09 22:28:05
@ user1200752的翻译感到抱歉,这里有几件事要尝试。将这个'user'类声明移动到一个单独的文件中,以便它不嵌套在MainWindow类中。然后用'[DataContract]'属性装饰它,并移除'[Serializable]'属性。 – 2012-02-09 22:36:35
重复的问题:http://stackoverflow.com/问题/ 3142495/deserialize-json-into-c-sharp-dynamic-object – 2012-02-09 22:16:29