繁体   English   中英

如何使用ServiceStack存储JSON数组?

[英]How store a JSON array with ServiceStack?

我知道如何在表中存储简单的JSON消息,但是如果生成JSON数组,如何将数据轻松存储在同一表中? 例如:

[{“ ID”:0,“ Data1”:123,“ Data2”:“ String1”,“ Timestamp”:“ / Date(-62135596800000-0000)/”},{“ ID”:0,“ Data1”: 456,“ Data2”:“ String2”,“ Timestamp”:“ /日期(-62135596800000-0000)/”}]

我尝试过这样的事情,但 它不起作用 它不会编译:

public class Table1
{
    public List<Table1> Table1LIST{ get; set; }

    [AutoIncrement]
    public int ID { get; set; } 
    public int Data1{ get; set; }
    public string Data2{ get; set; }
    public DateTime Timestamp { get; set; }
}

// Add Table1 via POST
[Route("/Table1ADD", Verbs = "POST")]
public class Table1 ADD
{
    public int ID { get; set; } 
    public int Data1{ get; set; }
    public string Data2{ get; set; }
    public DateTime Timestamp { get; set; }
}

// Add multi Table1 via POST
[Route("/Table1ADDMulti", Verbs = "POST")]
public class Table1 ADDMulti
{
    public List<Table1 > Table1LIST { get; set; }
}

    // Store JSON array
    public object Post(Table1Multi request)
    {
        var data =new Table1()
        {
            Table1LIST = request.Table1LIST
        };

        CRUDFunctions CRUD = new CRUDFunctions(Db);
        return CRUD.AddData(data);
    }

我使用函数插入来存储我的数据(CRUD.AddData())。 该函数指定可以同时存储多行。

这样做的目的是避免发送多个消息。 提前致谢

你是相当接近,但你不应该添加一个List<Table1>Table1 而是按如下所示创建Table1 ,并制作一个简单的DTO(例如Table1Multiple来处理多个值。

[Route("/Table1","POST")]
public class Table1 : IReturn<int>
{
    [AutoIncrement]
    public int ID { get; set; } 
    public int Data1 { get; set; }
    public string Data2 { get; set; }
    public DateTime Timestamp { get; set; }
}

[Route("/Table1/Multi","POST")]
public class Table1Multiple : IReturn<List<int>>
{
    public List<Table1> Values { get; set; }
}

在该服务中,您应该重用用于存储单个记录的代码,并简单地迭代Table1 Values的列表。

class TestService : Service
{
    // Stores a single Table1 record
    public int Post(Table1 request)
    {
        // Add your method to store a single record
        var CRUD = new CRUDFunctions(Db);
        return CRUD.AddData(request); // Return the ID of the created record
    }

    // Stores multiple Table1 records
    public List<int> Post(Table1Multiple request)
    {
        // Return a list of the record Ids
        var result = new List<int>();

        // Process each request, through the single record code
        foreach(var value in request.Values)
            result.Add(Post(value));

        return result;
    }
}

解决您未填充的DTO

I don't get anything in "request" in debug mode.

您有两种选择。 您可以更改请求以使用属性values

{values:[{"ID":0,"Data1":123,"Data2":"String1","Timestamp":"/Date(-62135596800000-0000)/"},
         {"ID":0,"Data1":456,"Data2":"String2","Timestamp":"/Date(-62135596800000-0000)/"}]}

或者,您可以更改请求DTO以从List<Table1>扩展:

// 
[Route("/Table1/Multi","POST")]
public class Table1Multiple : List<Table1>, IReturn<List<int>>
{
}

然后修改服务,使其读取var value in requestvar value in request.Values而不是var value in request.Valuesvar value in request.Values

class TestService : Service
{
    // Stores a single Table1 record
    public int Post(Table1 request)
    {
        // Add your method to store a single record
        var CRUD = new CRUDFunctions(Db);
        return CRUD.AddData(request); // Return the ID of the created record
    }

    // Stores multiple Table1 records
    public List<int> Post(Table1Multiple request)
    {
        // Return a list of the record Ids
        var result = new List<int>();

        // Process each request, through the single record code
        foreach(var value in request) // Collection changed here
            result.Add(Post(value));

        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM