我们有一个有趣的情况,我们将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即可。欢迎所有反馈。
答案 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;
}
这对我来说非常有用。如果有更好的方法,请告诉我。