网络.API返回字符串属性为json



我们有一个有趣的情况,我们将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返回。它看起来像:

{
   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是非常简单的,只是返回一个IHttpActionResult与dto。

我想我明白了。In my 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();
            }
        }
}

在我的repo代码中我现在有:

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

这对我来说很有效。如果有更好的方法,请告诉我。

相关内容

  • 没有找到相关文章