servicestack,C#,Arrays,Json,servicestack" /> servicestack,C#,Arrays,Json,servicestack" />

C# 如何使用ServiceStack存储JSON数组?

C# 如何使用ServiceStack存储JSON数组?,c#,arrays,json,servicestack,C#,Arrays,Json,servicestack,我知道如何在表中存储简单的JSON消息,但如果生成JSON数组,如何在同一个表中轻松存储数据? 例: [{“ID”:0,“Data1”:123,“Data2”:“String1”,“Timestamp”:“/Date(-62135596800000-0000)/”},{“ID”:0,“Data1”:456,“Data2”:“String2”,“Timestamp”:“/Date(-62135596800000-0000)/”}] 我尝试过类似的方法,但不起作用,无法编译: public clas

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

[{“ID”:0,“Data1”:123,“Data2”:“String1”,“Timestamp”:“/Date(-62135596800000-0000)/”},{“ID”:0,“Data1”:456,“Data2”:“String2”,“Timestamp”:“/Date(-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);
    }
公共类表1
{
公共列表表1列表{get;set;}
[自动增量]
公共int ID{get;set;}
public int Data1{get;set;}
公共字符串Data2{get;set;}
公共日期时间时间戳{get;set;}
}
//通过邮寄方式添加表1
[路线(“/Table1ADD”,动词=“POST”)]
公共类表1增补
{
公共int ID{get;set;}
public int Data1{get;set;}
公共字符串Data2{get;set;}
公共日期时间时间戳{get;set;}
}
//通过POST添加多表1
[路线(“/Table1ADDMulti”,动词=“POST”)]
公共类表1 ADDMulti
{
公共列表表1列表{get;set;}
}
//存储JSON数组
公共对象Post(表1多请求)
{
变量数据=新表1()
{
Table1LIST=请求。Table1LIST
};
CRUDFUNCES CRUD=新的CRUDFUNCES(Db);
返回积垢添加数据(数据);
}
我使用函数insert来存储数据(CRUD.AddData())。此函数指定可以同时存储多行

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

您非常接近,只是您不应该将
列表
添加到
表1
。相反,创建如下所示的
Table1
,并创建一个简单的DTO,如
Table1Multiple
来处理多个值

[路线(“/Table1”,“POST”)]
公共课表1:I
{
[自动增量]
公共int ID{get;set;}
public int Data1{get;set;}
公共字符串Data2{get;set;}
公共日期时间时间戳{get;set;}
}
[路线(“/Table1/Multi”,“POST”)]
公共类表1多个:IReturn
{
公共列表值{get;set;}
}
在服务中,您应该重用用于存储单个记录的代码,只需迭代
表1
值的列表即可

类TestService:Service
{
//存储单个Table1记录
公共int Post(表1请求)
{
//添加存储单个记录的方法
var CRUD=新的CRUD函数(Db);
return CRUD.AddData(request);//返回所创建记录的ID
}
//存储多个Table1记录
公共列表帖子(表1多重请求)
{
//返回记录ID的列表
var result=新列表();
//通过单个记录代码处理每个请求
foreach(request.Values中的var值)
结果。添加(后(值));
返回结果;
}
}

寻址未填充的DTO
我在调试模式下的“请求”中没有得到任何信息。

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

{values:[{"ID":0,"Data1":123,"Data2":"String1","Timestamp":"/Date(-62135596800000-0000)/"},
         {"ID":0,"Data1":456,"Data2":"String2","Timestamp":"/Date(-62135596800000-0000)/"}]}
您可以将请求数据更改为从
列表中进行扩展

//
[路线(“/Table1/Multi”,“POST”)]
公共类表1多个:列表,IReturn
{
}
然后修改服务,使其读取请求中的
var值
,而不是请求中的
var值。值

{values:[{"ID":0,"Data1":123,"Data2":"String1","Timestamp":"/Date(-62135596800000-0000)/"},
         {"ID":0,"Data1":456,"Data2":"String2","Timestamp":"/Date(-62135596800000-0000)/"}]}
类TestService:Service
{
//存储单个Table1记录
公共int Post(表1请求)
{
//添加存储单个记录的方法
var CRUD=新的CRUD函数(Db);
return CRUD.AddData(request);//返回所创建记录的ID
}
//存储多个Table1记录
公共列表帖子(表1多重请求)
{
//返回记录ID的列表
var result=新列表();
//通过单个记录代码处理每个请求
foreach(请求中的var值)//此处更改了集合
结果。添加(后(值));
返回结果;
}
}

我的建议有帮助吗?是的,谢谢,我正在处理它,只是当我试图发布一个数组时,在调试模式下的“请求”中我没有得到任何东西。您确定这是我应该用来存储多个表1的列表,而不是列表吗?
List
是返回类型,即您可以返回插入ID的列表。我会更新我的答案,让这更清楚,给我20分钟。我已经更新了答案,以解决您的DTO未被填充的问题。请让我知道你进展如何。它仍然不起作用,我得到一个错误“(405)方法不允许”我不知道你尝试了什么方法。在没有看到的情况下调试程序有点困难。如果你能链接到源代码,比如说GitHub上的源代码,就有可能找出哪里出了问题。完成后,我会给你一个机会,谢谢你的帮助。我已经创建了一个完整的例子,说明你在哪里尝试做什么。你应该考虑在将来使用一个一致的命名约定,并尽量保持代码简洁明了,这将使你更容易理解和调试错误。非常感谢史葛的帮助和建议。所有的东西我都是自己学的,所以我有一些问题需要组织和整理我的代码。你的结构让我想得很清楚,我会记住的。再次感谢