
您的问题是, 如何 在不转义JSON的情况下 , 如何使用string
包含“原始” JSON 的成员对类型进行序列化和反序列化?
这可以通过做自定义
JsonConverter读取和写入使用原始JSON
JsonWriter.WriteRawValue()和
JRaw.Create():
public class RawConverter : JsonConverter{ public override bool CanConvert(Type objectType) { throw new NotImplementedException(); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var raw = JRaw.Create(reader); return raw.ToString(); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var s = (string)value; writer.WriteRawValue(s); }}然后将其应用于您的类型,如下所示:
public class Employee{ public int EmpId { get; set; } public string EmpName { get; set; } // **Note** : I'm not using List<Address> data type for Address, instead of I want list of address in JSON string [JsonConverter(typeof(RawConverter))] public string Address { get; set; }}public class RootObject{ public List<Employee> Employees { get; set; }}样品提琴。
请注意,原始JSON字符串 必须
代表有效的JSON。如果不是,则创建的JSON将不可读。如果要保证JSON文字有效,则可以在内部将JSON保持为已解析状态:
public class Employee{ public int EmpId { get; set; } public string EmpName { get; set; } [JsonProperty("Address")] JToken AddressToken { get; set; } [JsonIgnore] public string Address { get { if (AddressToken == null) return null; return AddressToken.ToString(Formatting.Indented); // Or Formatting.None if you prefer } set { if (value == null) AddressToken = null; else // Throw an exception if value is not valid JSON. AddressToken = JToken.Parse(value); } }}此实现不需要转换器。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)