WEB.API返回字符串属性为json

时间:2016-10-13 13:11:48

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

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

我们使用Newtonsoft作为我们的Json Serializer。这是高级设置:

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即可。欢迎所有反馈。

1 个答案:

答案 0 :(得分:0)

所以我想我明白了。在我的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;
}

这对我来说非常有用。如果有更好的方法,请告诉我。