如何使用DataContractJsonSerializer处理Json数据?

3
我有这样的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中获取其他值,但是在Emails中我什么也拿不到。为什么会这样?我该如何编写这个类呢?


你的意思是说什么都没有得到?info.emails 没有任何值吗?你确定你在读取正确的文件吗? - Alex Filipovici
是的,我确定问题就在于我需要把电子邮件中的属性改为小写!我不知道为什么,但好像将它们改为小写后就可以运行了! - EthenHY
3个回答

2

我发现问题在于我需要将所有电子邮件(Emails)的属性改为小写...

我不知道为什么..但它起作用了。


5
是因为你这样写:[DataMember(Name = "emails")] public Emails emails { get; set; }。如果不指定Name参数,它会默认接受 Emails - cwc

1
您的对象属性的大小写必须与JSON中的大小写匹配。(请参见下面的粗体)。
public Emails **emails** { get; set; }

{ "id":"12345", "first_name": "dino", "last_name": "he", "**emails**": { "preferred": "1", "personal": "2", "business": "3", "other": "4" }

0

或者您可以像为DataMember一样,将Name添加到DataContract属性中:

[DataContract (Name="emails")]
public class Emails
{

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接