Csharp/C#教程:JSON.NET:将json string属性序列化为json对象分享


JSON.NET:将json string属性序列化为json对象

有可能告诉JSON.NET我有一个带有JSON数据的字符串吗? 我有一个这样的课:

public class Foo { public int Id; public string RawData; } 

我用的是这样的:

 var foo = new Foo(); foo.Id = 5; foo.RawData = @"{""bar"":42}"; 

我希望像这样序列化:

 {"Id":5,"RawData":{"bar":42}} 

基本上我有一块非结构化的可变长度数据已经存储为JSON,我需要完全序列化的对象来包含这些数据作为一部分。

谢谢。

编辑:只是为了确保它被正确理解,这是单向序列化,即我不需要它反序列化回同一个对象; 另一个系统应处理此输出。 我需要将RawData的内容作为JSON的一部分,而不仅仅是字符串。

你需要一个转换器才能做到这一点,这是一个例子:

 public class RawJsonConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteRawValue(value.ToString()); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { throw new NotImplementedException(); } public override bool CanConvert(Type objectType) { return typeof(string).IsAssignableFrom(objectType); } public override bool CanRead { get { return false; } } } 

然后用它装饰你的课:

 public class Foo { public int Id; [JsonConverter(typeof(RawJsonConverter))] public string RawData; } 

然后,当你使用:

 var json = JsonConvert.SerializeObject(foo, new JsonSerializerSettings()); Console.WriteLine (json); 

这是你的输出:

 {"Id":5,"RawData":{"bar":42}} 

希望能帮助到你

编辑:我已经更新了我的答案以获得更有效的解决方案,前一个强制您序列化然后反序列化,但事实并非如此。

有可能,使用JRaw可能是更可靠和comapct解决方案

看这篇文章

您可以使用另一个属性来反序列化对象属性json。

上述就是C#学习教程:JSON.NET:将json string属性序列化为json对象分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 public class Foo { public int Id; public string RawData; private object thisObject; public object ThisObject { get { return thisObject ?? (thisObject = JsonConvert.DeserializeObject(RawData)); } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/961544.html

(0)
上一篇 2021年11月26日
下一篇 2021年11月26日

精彩推荐