【发布时间】:2011-10-28 14:32:18
【问题描述】:
当使用System.Runtime.Serialization.Json.DataContractJsonSerializer 序列化对象时,有没有办法在 JSON 字符串中设置“根”或顶级键?
例如,这是一个类:
[DataContract]
public class Person
{
public Person() { }
public Person(string firstname, string lastname)
{
this.FirstName = firstname;
this.LastName = lastname;
}
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
当它被序列化使用时...
public static string Serialize<T>(T obj)
{
Json.DataContractJsonSerializer serializer =
new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
string retVal = Encoding.Default.GetString(ms.ToArray());
ms.Dispose();
return retVal;
}
生成的 JSON 字符串如下所示:
{"FirstName":"Jane","LastName":"McDoe"}
有没有办法让序列化程序添加一些值?
例如:
{Person: {"FirstName":"Jane","LastName":"McDoe"}}
当然,我可以简单地更改我的 Serialize 方法来包装返回的 JSON 字符串,例如:
string retVal = "{Person:" + Encoding.Default.GetString(ms.ToArray()) + "}";
但我想知道是否有某种方法可以告诉序列化程序添加它? DataContract 属性上的 namespace 属性似乎没有帮助。
【问题讨论】:
-
使用JSON.NET,它会让你在使用JSON时大大更轻松;我发现开箱即用的 .NET 产品非常非常缺乏。
-
为什么要把它包装在类型中?你提出的建议对我来说似乎不是好的 JSON。我会更进一步,只做一个数组。 {人员:[人员]}
-
实际上我正在使用 CouchDB 客户端。当您通过 CouchDB API 添加对象 (JSON) 时,它希望该对象具有标签。我也会检查 JSON.NET。谢谢
-
我还注意到其中一个 Serialize 方法签名要求提供“XmlDictionaryString rootName”参数,但它似乎不起作用.. 现在可以在 JSON.NET 上使用
标签: c# .net json serialization