0

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);
    }
}

ありがとう

4

3 に答える 3

2

JSON テキストは のリストではなく、Contact名前を連絡先にマッピングするオブジェクトであるため、aList<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>.

于 2011-03-10T21:15:11.177 に答える
1

JSON.NETを確認してください。それは十分に文書化されており、高度に拡張可能です。

于 2011-03-10T21:14:03.280 に答える
-1

http://www.json.org/

「値は、二重引用符で囲まれた文字列、数値、true、false、null、またはオブジェクトまたは配列にすることができます。これらの構造はネストできます。」

""John Doe"" は有効な文字列ではありません。引用符を保持したい場合は、これを使用します:

"\"ジョン・ドウ\""

しかし、私はあなたがただ欲しいと思う:

"ジョン・ドウ"

于 2011-03-10T21:19:01.310 に答える