C# 在Web API调用中将字符串JSON属性转换为对象
我有一个表示MSSQL数据库中的表的类:C# 在Web API调用中将字符串JSON属性转换为对象,c#,sql-server,json,serialization,jsonserializer,C#,Sql Server,Json,Serialization,Jsonserializer,我有一个表示MSSQL数据库中的表的类: public string firstname { get; set; } public string lastname { get; set; } public string events { get; set; } List<Event> yourEvents = new List<Event>(); Newtonsoft.Json.JsonConvert.SerializeObject(yourEvents).ToStr
public string firstname { get; set; }
public string lastname { get; set; }
public string events { get; set; }
List<Event> yourEvents = new List<Event>();
Newtonsoft.Json.JsonConvert.SerializeObject(yourEvents).ToString();
“events”属性实际上是在存储到表中之前序列化的JSON对象数组。示例行:
FirstName: Test
LastName: User
Events: [{"eventname":"event1","eventtype":"1"},{"eventname":"event2","eventtype":"2"}]
我需要以JSON格式从Web API调用返回此表的内容,如下所示:
[{
"firstname":"Test",
"lastname":"User",
"Events":[{"eventname":"event1","eventtype":"1"},{"eventname":"event2","eventtype":"2"}]
},
{...}]
问题是,当我执行此操作时,events JSON属性将被转义并显示为单个字符串,如下所示:
[{
"firstname":"Test",
"lastname":"User",
"Events":"[{\"eventname\":\"event1\",\"eventtype\":\"1\"},{\"eventname\":\"event2\",\"eventtype\":\"2\"}]
},
{...}]"
很明显,这是因为events属性的类是一个字符串变量,但不确定我可以做什么,而不必循环每一行来重新格式化?在C#中处理对象时,我建议创建一个事件类来列出事件对象:
public class Event
{
public string EventName { get; set; }
public string EventType { get; set; }
}
public class YourClass
{
public string firstname { get; set; }
public string lastname { get; set; }
public List<Event> events { get; set; }
}
要反序列化所有检索到的数据,可以使用Linq:
public class RetrievedClass
{
public string firstname { get; set; }
public string lastname { get; set; }
public string events { get; set; }
}
List<RetrievedClass> dbData = mssql()
List<YourClass> result = dbData.Select(x => new YourClass
{
firstname = x.firstname,
lastname = x.lastname,
events = Newtonsoft.Json.JsonConvert.DeserializeObject(x.events)
});
公共类RetrievedClass
{
公共字符串名{get;set;}
公共字符串lastname{get;set;}
公共字符串事件{get;set;}
}
List dbData=mssql()
List result=dbData.Select(x=>newyourclass
{
firstname=x.firstname,
lastname=x.lastname,
events=Newtonsoft.Json.JsonConvert.DeserializeObject(x.events)
});
不幸的是,我看不到不使用Linq或循环的方法。这种方法很好,如果您想让模型同步,可以使用字符串属性events,它将有一个getter序列化事件集合。这将为您提供一个简单的模型绑定和数据库同步,这就是我在MSSQL中创建数据的有效方法。之后反序列化意味着循环每一行,不是吗?啊,我明白了。我编辑了我的答案,以包括我将如何进行数据反序列化。
public class RetrievedClass
{
public string firstname { get; set; }
public string lastname { get; set; }
public string events { get; set; }
}
List<RetrievedClass> dbData = mssql()
List<YourClass> result = dbData.Select(x => new YourClass
{
firstname = x.firstname,
lastname = x.lastname,
events = Newtonsoft.Json.JsonConvert.DeserializeObject(x.events)
});