假设我有这个对象:
[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后端,您会注意到Rails' 默认的to_json实现包括a下的模型属性 命名空间。要禁用此行为以实现无缝的Backbone集成, 设置:
ActiveRecord :: Base.include_root_in_json = false
答案 0 :(得分:2)
如果你只想为root对象做这件事,我认为最简单的方法就是以一种方式将对象封装起来,以便按照你想要的方式进行序列化:
static object AddTypeName(object o)
{
return new Dictionary<string, object>
{
{ o.GetType().Name.ToLowerInvariant(), o }
};
}
答案 1 :(得分:2)
我使用JavaScriptSerializer.Serialize(Object):
亲自实现了这一目标JavaScriptSerializer javaScriptSerializer = new JavascriptSerializer();
javaScriptSerializer.Serialize( new { user = userObject } );
这应该会自动反序列化以下类:
class User
{
string id;
int age;
}
进入这个:
{
user : {
id = '12321345',
age = 32
}
}