![](/img/trans.png)
[英]How to serialize an object to a JSON string property instead of an object using Json.Net
[英]JSON.NET: Serialize json string property into json object
是否可以告诉 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
可能是更适合和更适合的解决方案
看到这个帖子
您可以使用另一个属性来反序列化对象属性 json。
public class Foo
{
public int Id;
public string RawData;
private object thisObject;
public object ThisObject
{
get
{
return thisObject ?? (thisObject = JsonConvert.DeserializeObject<object>(RawData));
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.