我们有一个有趣的情况,我们将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;
}
这对我来说很有效。如果有更好的方法,请告诉我。