在 Web API 调用上将字符串 JSON 属性转换为对象
Posted
技术标签:
【中文标题】在 Web API 调用上将字符串 JSON 属性转换为对象【英文标题】:Convert string JSON property to Object on Web API Call 【发布时间】:2018-03-13 19:41:20 【问题描述】:我有以下代表 MSSQL 数据库中的表的类:
public string firstname get; set;
public string lastname get; set;
public string events get; set;
'events' 属性实际上是一个 JSON 对象数组,在存储到表中之前已序列化。示例行:
FirstName: Test
LastName: User
Events: ["eventname":"event1","eventtype":"1","eventname":"event2","eventtype":"2"]
我需要从 Web API 调用中以 JSON 格式返回此表的内容,以类似于:
[
"firstname":"Test",
"lastname":"User",
"Events":["eventname":"event1","eventtype":"1","eventname":"event2","eventtype":"2"]
,
...]
问题是当我这样做时,事件 JSON 属性被转义并以单个字符串的形式出现,如下所示:
[
"firstname":"Test",
"lastname":"User",
"Events":"[\"eventname\":\"event1\",\"eventtype\":\"1\",\"eventname\":\"event2\",\"eventtype\":\"2\"]
,
...]"
显然这是因为 events 属性的类是一个字符串变量,但不确定我能做些什么而不必遍历每一行来重新格式化?
【问题讨论】:
【参考方案1】:在 C# 中处理您的对象时,我建议创建一个 Event 类来创建 Event 对象列表:
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;
如果您需要将该对象作为 JSON 对象存储在您的 MSSQL 数据库中,您可以在将其保存到数据库时进行转换:
List<Event> yourEvents = new List<Event>();
Newtonsoft.Json.JsonConvert.SerializeObject(yourEvents).ToString();
当从您的 MSSQL 数据库中检索时,您可以使用 Serialize
函数的逆函数来创建您的 C# 列表:
Newtonsoft.Json.JsonConvert.DeserializeObject(yourRetrievedEvents);
到Deserialize
所有你可以使用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)
);
不幸的是,我没有看到不使用 Linq 或循环的方法。
【讨论】:
这种方法很好,如果你想让模型同步,你可以有一个字符串属性 events,它将有一个 getter 序列化事件集合。这将使您轻松进行模型绑定和数据库同步 这实际上是我在 MSSQL 中创建数据所拥有的。之后反序列化意味着循环遍历每一行,不是吗? 啊,我明白了。我编辑了我的答案,包括我将如何反序列化数据。以上是关于在 Web API 调用上将字符串 JSON 属性转换为对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 上将 Web 图像转换为 ListView
在 MVC Web Api 4 Beta 中从 Json 中删除 Null 属性
System.Text.Json 反序列化来自 API 调用的嵌套对象 - 数据包装在父 JSON 属性中