在Web API调用上将字符串JSON属性转换为Object

时间:2017-10-02 17:22:57

标签: c# sql-server json serialization jsonserializer

我有以下类来表示MSSQL数据库中的表:

public string firstname { get; set; }
public string lastname { get; set; }
public string events { get; set; }

&#39>事件' property实际上是在存储到表中之前序列化的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"}]
},
{...}]

问题是当我这样做时,事件JSON属性被转义并以单字符串形式出现:

[{
  "firstname":"Test",
  "lastname":"User",
  "Events":"[{\"eventname\":\"event1\",\"eventtype\":\"1\"},{\"eventname\":\"event2\",\"eventtype\":\"2\"}]
},
{...}]"

显然它是因为events属性的类是一个字符串变量,但不知道我能做些什么而不必遍历每一行来重新格式化?

1 个答案:

答案 0 :(得分:-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; }
}

如果您需要将该对象存储为MSSQL数据库中的JSON对象,则可以在将其保存到数据库时对其进行转换:

List<Event> yourEvents = new List<Event>();

Newtonsoft.Json.JsonConvert.SerializeObject(yourEvents).ToString();

从MSSQL数据库中检索时,您可以使用Serialize函数的反转来创建C#List:

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或循环的方法。