2010-11-19 50 views
0

我真的不知道如何詞組這個問題,但是,我有以下的JSON JSON:如何與反序列化對象名稱

{ 
    "person": { 
    "first_name": "John", 
    "gender": "M", 
    "last_name": "Doe" 
    } 
} 

而且使用json.net/javascriptserializer(asp.net反序列化)我有以下測試代碼:

public class Person 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string gender { get; set; } 
} 


[Test] 
public void TestDeserialize() 
{ 
    string json = @"{""person"":{""first_name"":""John"",""gender"":""M"",""last_name"":""Doe""}}"; 

    var serializer = new JavaScriptSerializer(); // asp.net mvc (de)serializer 

    Person doe = serializer.Deserialize<Person>(json); 
    Person doe1 = JsonConvert.DeserializeObject<Person>(json); // json.net deserializer 

    Assert.AreEqual("John", doe.first_name); 
    Assert.AreEqual("John", doe1.first_name); 
} 

測試方法失敗,因爲兩者都爲空。我的代碼反序列化有什麼問題?

回答

1

你需要一箇中介類在這裏:

public class Model 
{ 
    public PersonDetails Person { get; set; } 
} 

public class PersonDetails 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string gender { get; set; } 
} 

然後:

string json = @"{""person"":{""first_name"":""John"",""gender"":""M"",""last_name"":""Doe""}}"; 
var serializer = new JavaScriptSerializer(); 
var model = serializer.Deserialize<Model>(json); 
Assert.AreEqual("John", model.Person.first_name); 
+0

感謝達林這個作品,它只是吮吸,你需要有一箇中介對象。 – bonskijr 2010-11-19 14:58:20

+2

由於您的JSON定義,您需要此中介對象。就這麼簡單。如果你的JSON沒有「人」部分,那麼你就不需要這個對象。 – 2010-11-19 15:14:52

0

檢查對象在調試器,但我懷疑你需要測試doe.person.first_namedoe1.person.first_name

0

這將做到這一點:

 string json = @"{'first_name':'John','gender':'M','last_name':'Doe'}";   
     var serializer = new JavaScriptSerializer(); 
     Person doe = serializer.Deserialize<Person>(json); 

[編輯] 哦,等等......也許你不能控制你收到的JSON,不能改變它。如果是這種情況,Darin的解決方案就是你所需要的。