2013-02-19 2 views
3

У меня есть структура JSon так:Как использовать DataContractJsonSerializer для 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, но для электронных писем я ничего не получаю. Почему, и как мне написать класс? Пожалуйста, помогите мне!

+0

Что значит, что вы ничего не получаете? Нет ли значения в 'info.emails'? Вы уверены, что читаете правильный файл? –

+0

Да, я уверен, и проблема в том, что мне нужно изменить свойство в письмах на нижний регистр! Я не знаю, почему ... но похоже, я меняю их на нижний регистр, они могут работать! – EthenHY

ответ

2

Я обнаружил, что проблема заключается в том, что мне нужно изменить все мое имущество в письмах на нижний регистр ... Не знаю почему .. Но это сработало.

+5

Это потому, что вы делаете это: '[DataMember (Name =" emails ")] электронные письма электронной почты {get; задавать; } '. Без заданного параметра Name он будет принимать по умолчанию «Электронные письма». – 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" } 
Смежные вопросы