![](/img/trans.png)
[英]How do I parse a multidimensional JSON array using ServiceStack.Text?
[英]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;
}
}
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 request
的var value in request.Values
而不是var value in request.Values
的var 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.