c# - 如何告诉 JsonConvert.SerializeObject 将字符串对象视为 JSON

标签 c# json

如何告诉 JsonConvert.SerializeObjectUserPreferences 视为 JSON 对象(它作为字符串存储在数据库中)。

  public int UserId { get; private set; }

  [[JsonProperty something]]
  public string UserPreferences { get; private set; }

  public CFUser(Int32 userId, string userPreferences) {
      UserId = userId;
      UserPreferences = userPreferences;
  }

最佳答案

解决您的问题的一个选项是对 UserPreferences 属性使用自定义 JsonConverter。为此,您需要使用以下属性来装饰该属性:

[JsonConverter(typeof(UserPreferencesConverter))]
public string UserPreferences { get; private set; }

这是一个完整的示例:

class Program
{
    static void Main(string[] args)
    {
        var cfUser = new CFUser(1, @"{""test"":""ok""}");
        var json = JsonConvert.SerializeObject(cfUser);
        var deserialized = JsonConvert
            .DeserializeObject(json, typeof(CFUser));
    }

}

class UserPreferencesConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(
        JsonReader reader, Type objectType, 
        object existingValue, JsonSerializer serializer)
    {
        var jObject = JObject.Load(reader);

        // you may use the following line instead
        //return jObject.ToString().Replace("\r\n", "");

        return jObject.ToString()
            .Where(c => !"\r\n".Contains(c))
            .Aggregate<char, string>("", (s, c) => s + c);
    }

    public override void WriteJson(JsonWriter writer, 
        object value, JsonSerializer serializer)
    {
        writer.WriteRawValue(value.ToString());
    }
}

public class CFUser
{
    public int UserId { get; private set; }

    [JsonConverter(typeof(UserPreferencesConverter))]
    public string UserPreferences { get; private set; }

    public CFUser(Int32 userId, string userPreferences)
    {
        UserId = userId;
        UserPreferences = userPreferences;
    }
}

关于c# - 如何告诉 JsonConvert.SerializeObject 将字符串对象视为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109363/

相关文章:

javascript - 递归地从 JavaScript 对象中删除空值

java - Gzip apache Camel 请求休息

php - 如何正确获取 JSONArray 项?

c# - Devexpress MVC 对象作为回调参数

c# - ASP.Net 中的 @Section 脚本 (VB)

c# - 为什么 Azure Function v2 无法绑定(bind)到 CloudTable?

json - JsPath.json.update 不适用于路径(IdxPathNode)中的数组元素?

c# - 日期时间.ParseExact : "String not recognised as a valid DateTime"

c# - 如何测试以确保接口(interface)除了列出的方法之外没有其他方法?

java - 共享首选项无法存储和读取带有条件的值。(Android Studio)