
例如,这是一个类:
[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属性似乎没有帮助.
解决方法 你可以这样做,但它不是太漂亮 – 你需要知道DataContractJsonSerializer使用的一些 JSON to XML mapping规则.对于简单的情况,你只想将对象包装在类型名称中,这很简单 – 下面的代码就是这样做的.您需要使用所需的“根”名称创建序列化程序(在本例中我使用了类型名称),并向其传递已赋予根元素的XmlDictionaryWriter实例.public class StackOverflow_7930629{ [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) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T),typeof(T).name); MemoryStream ms = new MemoryStream(); XmlDictionaryWriter w = JsonReaderWriterFactory.CreateJsonWriter(ms); w.WriteStartElement("root"); w.WriteAttributeString("type","object"); serializer.WriteObject(w,obj); w.WriteEndElement(); w.Flush(); string retVal = EnCoding.Default.GetString(ms.ToArray()); ms.dispose(); return retVal; } public static voID test() { Console.Writeline(Serialize(new Person("Jane","McDoe"))); }} 正如其中一条评论中所提到的,使用JsON和DataContractJsonSerializer并不是太友好了.一些JsON特定的库(如JsON.NET或JsonValue类型(nuget包JsonValue))可以让您的生活更轻松.
总结以上是内存溢出为你收集整理的c# – 使用DataContractJsonSerializer设置JSON对象root全部内容,希望文章能够帮你解决c# – 使用DataContractJsonSerializer设置JSON对象root所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)