如何使用DataContractJsonSerializer for Json?
问题描述:
我JSON结构是这样的:如何使用DataContractJsonSerializer for Json?
{
"id":"12345",
"first_name": "dino",
"last_name": "he",
"emails": {
"preferred": "1",
"personal": "2",
"business": "3",
"other": "4"
}
}
我想在电子邮件 价值所以我写两个类:
[DataContract]
public class UserInformation
{
[DataMember(Name = "id")]
public string ID { get; set; }
[DataMember(Name = "emails")]
public Emails emails { get; set; }
[DataMember(Name = "last_name")]
public string Name { get; set; }
}
[DataContract]
public class Emails
{
[DataMember(Name = "preferred")]
public string Preferred { get; set; }
[DataMember(Name = "personal")]
public string Account { get; set; }
[DataMember(Name = "business")]
public string Personal { get; set; }
[DataMember(Name = "other")]
public string Business { get; set; }
}
而且 我写这样的代码:
StreamReader stream = new StreamReader(@"C:\Visual Studio 2012\Projects\ASP.net\WebApplication1\WebApplication2\TextFile1.txt");
string text = stream.ReadToEnd();
stream.Close();
byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream stream1 = new MemoryStream(byteArray);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(UserInformation));
var info = serializer.ReadObject(stream1) as UserInformation;
stream1.Close();
有关信息,我可以在UserInformation中获得其他值,但对于电子邮件,我什么也得不到。 为什么,我应该怎么写班? 请帮帮我!
答
我发现问题是我需要将电子邮件中的所有属性更改为小写... 我不知道为什么..但它工作。
+5
这是因为你这样做:'[DataMember(Name =“emails”)] public Emails emails {get;组; }'。如果没有指定Name参数,它将默认接受'Emails'。 – cwc 2014-02-21 21:20:06
答
您的对象属性的大小写必须与JSON中的大小写匹配。 (见下面的粗体)。
public Emails **emails** { get; set; }
{ "id":"12345", "first_name": "dino", "last_name": "he", "**emails**": { "preferred": "1", "personal": "2", "business": "3", "other": "4" }
你是什么意思,你什么都得不到? 'info.emails'没有任何价值吗?你确定你正在阅读正确的文件吗? – 2013-02-19 14:33:02
是的,我敢肯定,问题是我需要将电子邮件中的属性更改为小写! 我不知道为什么...但似乎我改变他们为小写,他们可以工作! – EthenHY 2013-02-20 02:54:02