【问题标题】:WEB.API returning string property as jsonWEB.API 以 json 形式返回字符串属性
【发布时间】:2016-10-13 13:11:48
【问题描述】:

我们有一个有趣的情况,我们将 json 作为字符串存储在 SQL Server 中。我们不在乎这个对象中有什么,它几乎是一个传递属性。直通意味着我们只是将其保存给客户并按原样返回。我们从未在 C# 中阅读过它。我将它作为 nvarchar 存储在数据库中,但我试图弄清楚如何自动将该字符串序列化为 json 对象以返回给客户端。我不想在javascript中调用fromJson

我们使用 Newtonsoft 作为我们的 Json 序列化器。这是高级设置:

DTO:

public class MyDto{
    public  dynamic SessionBag { get;set;}
}

实体框架实体:

public class My{
   public string SessionBag { get;set;}
}

客户会发布/放置我们:

{"SessionBag":{"Name":"test"}}

然后我们将它作为字符串保存在数据库中:

"{"Name":"test"}"

我怎样才能序列化它,所以当它从 Web.API 返回时,它看起来像:

{
   SessionBag:{
      Name: "test"
   }

}

我目前正在尝试使用动态/对象来保存它。但我不知道如何将它作为 json 对象返回。我很想弄清楚如何仅使用注释来做到这一点。

这是我如何将其转换为要保存的字符串:

 if (dto.SessionBag != null){
    var serializer = JsonSerializer.Create(new JsonSerializerSettings(){
                NullValueHandling = NullValueHandling.Ignore

    });
    using (var writer = new StringWriter()){
          serializer.Serialize(writer, dto.SessionBag);
          entity.SessionData = writer.ToString();
    }
 }

如果它有帮助,我们的 WebApiControllers 非常简单,只需返回带有 dto 的 IHttpActionResult。欢迎所有反馈。

【问题讨论】:

    标签: json.net asp.net-web-api2


    【解决方案1】:

    所以我想我想通了。在我的 dto 中:

    [JsonIgnore]
    public string  SessionBagString { get; set; }
    
    public JObject SessionBag
    {
            get
            {
                if (!string.IsNullOrEmpty(SessionBagString))
                {
                    return JObject.Parse(SessionBagString);
                }
                return null;
            }
            set
            {
                if(value != null)
                {
                    SessionBagString = value.ToString();
                }
            }
    }
    

    在我的回购代码中,我现在有:

    if (dto.SessionBag != null)
    {          
      entity.SessionBagString =  dto.SessionBagString;
    }
    

    这对我来说非常有用。让我知道是否有更好的方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 2023-04-11
      • 2021-04-04
      相关资源
      最近更新 更多