Нужна помощь в разборе JSON - PullRequest
0 голосов
/ 11 марта 2011

Следующий код для разбора JSON не работает.Что я делаю не так?

string jsonText =
    @"{
        ""John Doe"":{
            ""email"":""jdoe@gmail.com"",
            ""ph_no"":""4081231234"",
            ""address"":{                    
                ""house_no"":""10"",
                ""street"":""Macgregor Drive"",
                ""zip"":""12345""
            }
        },
        ""Jane Doe"":{
            ""email"":""jane@gmail.com"",
            ""ph_no"":""4081231111"",
            ""address"":{
                ""house_no"":""56"",
                ""street"":""Scott Street"",
                ""zip"":""12355""
            }
        }
    }"

public class Address {
    public string house_no { get; set; }
    public string street { get; set; }
    public string zip { get; set; }
}

public class Contact {
    public string email { get; set; }
    public string ph_no { get; set; }
    public Address address { get; set; }
}

public class ContactList
{
    public List<Contact> Contacts { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        ContactList cl = serializer.Deserialize<ContactList>(jsonText);
    }
}

Спасибо

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Текст JSON не является списком Contact с, это объект, отображающий имя в контакт, поэтому List<Contact> неуместно.

Следующий текст JSON соответствует List<Contact>:

var contactListJson = @"{
    ""email"":""jdoe@gmail.com"",
    ""ph_no"":""4081231234"",
    ""address"":{                    
        ""house_no"":""10"",
        ""street"":""Macgregor Drive"",
        ""zip"":""12345""
},
{
    ""email"":""jane@gmail.com"",
    ""ph_no"":""4081231111"",
    ""address"":{
        ""house_no"":""56"",
        ""street"":""Scott Street"",
        ""zip"":""12355""
}";

, поэтому следующий JSON будет соответствовать ContactList:

var jsonText = string.Format(@"{ ""Contacts"" : ""{0}"" }", contactListJson);

РЕДАКТИРОВАТЬ: Чтобы десериализовать существующий формат JSON, попробуйте десериализовать в Dictionary<string, Contact>.

1 голос
/ 11 марта 2011

Выезд JSON.NET .Это хорошо документировано и очень расширяемо.

0 голосов
/ 11 марта 2011

http://www.json.org/

"Значением может быть строка в двойных кавычках, или число, или истина, или ложь, или ноль, или объект или массив. Эти структуры могут быть вложенными."

" "John Doe" "не является допустимой строкой.Если вы хотите сохранить кавычки, вы должны использовать это:

"\" John Doe \ ""

но я подозреваю, что вы просто хотите:

"John Doe"

...