2012-01-17 56 views
2

比方說,我有這樣的對象:添加對象名稱來其連續字符串

[JsonObject] 
public class User 
{ 
    [JsonProperty(PropertyName = "id")] 
    public string Id { get; set; } 

    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "birthday")] 
    public DateTime Birthday { get; set; } 
} 

這將產生JSON是這樣的:

{ 
    "id":null, 
    "name":"Bob", 
    "birthday":"/Date(374479200000-0600)/" 
} 

我正在尋找一種方式來添加類名圍繞這一切,例如:

{ 
    "user":{ 
     "id":null, 
     "name":"Bob", 
     "birthday":"/Date(374479200000-0600)/" 
    } 
} 

JSON.NET有辦法做到這一點嗎?謝謝!

編輯

我這樣做的原因是.NET客戶端連接到一個Rails Web服務。 Rails將一個模型的屬性放在一個名稱空間下,所以我一直在尋找一種讓.NET符合這一點的方法。

然而,閱讀一些有關Backbone.js後,它看起來像一個可能的替代辦法是禁用此行爲中的Rails:

如果你有一個Rails後端的工作,你會發現,滑軌' 默認的to_json實現在名稱空間下包含模型的屬性。要禁用無縫集成骨幹這種行爲, 集:

的ActiveRecord :: Base.include_root_in_json =假

+0

聽起來像您需要DataContractJsonSerializer .. http://msdn.microsoft.com/en-us/library /system.runtime.serialization.json.datacontractjsonserializer.aspx – MethodMan 2012-01-17 17:19:28

+0

@DJKRAZE:非常感謝您的回覆,但請您指出一個可以實現我的目標的示例用法?謝謝! – Samo 2012-01-17 17:32:23

+0

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx http://stackoverflow.com/questions/7307100/servicestack-text-how-to-serialize- class-to-json – MethodMan 2012-01-17 17:53:40

回答

2

如果你只想根對象做到這一點,我認爲最簡單的方式就是封閉對象的方式,它被序列你想要的方式:

static object AddTypeName(object o) 
{ 
    return new Dictionary<string, object> 
    { 
     { o.GetType().Name.ToLowerInvariant(), o } 
    }; 
} 
+0

這似乎是一個非常乾淨的方式來從.NET端做到這一點。事實證明,我應該問的問題是如何刪除Rails一側的命名空間。我編輯了我的問題以顯示該解決方案。感謝您的提示! – Samo 2012-03-14 20:41:29

2

我實現了這個個人使用JavaScriptSerializer.Serialize(Object)

JavaScriptSerializer javaScriptSerializer = new JavascriptSerializer(); 
javaScriptSerializer.Serialize(new { user = userObject }); 

應自動反序列化以下類:

class User 
{ 
    string id; 
    int age; 
} 

到這一點:

{ 
    user : { 
     id = '12321345', 
     age = 32 
    } 
} 
相關問題