Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Web API调用中将字符串JSON属性转换为对象_C#_Sql Server_Json_Serialization_Jsonserializer - Fatal编程技术网

C# 在Web API调用中将字符串JSON属性转换为对象

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

我有一个表示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).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)
    });