JObject实例预期documentdb批量插入

时间:2017-03-31 17:59:05

标签: c# azure azure-cosmosdb

我有一个列表,其中包含3年的日历数据,我将它们放在Excel中,所以我使用oledb读取数据并将它们存储在列表中。您可以在下面找到列表

IList<BulkDateInsert> objExcelCon = ReadExcel(Filepath);

我在上面的列表中得到了什么

{
 "CalendarDate": "\/Date(1490985000000)\/",
 "Calendarday": "Sat",
  "isweekday": false,
  "isweekend": true
},
{
  "CalendarDate": "\/Date(1491071400000)\/",
  "Calendarday": "Sun",
  "isweekday": false,
  "isweekend": true
},
{
  "CalendarDate": "\/Date(1491157800000)\/",
  "Calendarday": "Mon",
  "isweekday": true,
  "isweekend": false
},
{
  "CalendarDate": "\/Date(1491244200000)\/",
  "Calendarday": "Tue",
  "isweekday": true,
  "isweekend": false
},
{
  "CalendarDate": "\/Date(1491330600000)\/",
  "Calendarday": "Wed",
  "isweekday": true,
  "isweekend": false
}, ..... N (upto year 2021)

我正在使用documentdb,所以我想将上面的列表作为单个文档,而不是每天单独的文档。

当我尝试使用createdocumentasync()时出现此错误

对象序列化为String。期望JObject实例。

 IList<BulkDateInsert> objExcelCon = ReadExcel(Filepath);
    JavaScriptSerializer js = new JavaScriptSerializer();
                        var json = js.Serialize(objExcelCon);
                        var ParsedJson = json.Replace("[", string.Empty).Replace("]", string.Empty);

                        await client.CreateDocumentAsync(collection.SelfLink, ParsedJson);

需要将它们作为单个文档插入,以便以后查询更容易。

1 个答案:

答案 0 :(得分:0)

  

当我尝试使用createdocumentasync()时出现此错误   对象序列化为String。期望JObject实例。

请不要序列化列表对象并将其作为文档传递给CreateDocumentAsync method以创建用于存储3年日历数据的文档。如果可能,正如David Makogon所说,请为每个日历条目创建文档。此外,您还可以将日历条目分组,并为分组日历条目创建单独的文档。以下简单示例供您参考。

class Program
{
    string EndpointUri = "{endpoint URL}";
    string PrimaryKey = "{primary key}";
    DocumentClient client;

    static void Main(string[] args)
    {
        BulkDateInsert item = new BulkDateInsert() { CalendarDate = @"\/Date(1490985000000)\/", Calendarday = "Sat", isweekday = false, isweekend = true };
        BulkDateInsert item1 = new BulkDateInsert() { CalendarDate = @"\/Date(1491071400000)\/", Calendarday = "Sun", isweekday = false, isweekend = true };
        List<BulkDateInsert> list = new List<BulkDateInsert>();
        list.Add(item);
        list.Add(item1);

        IList<BulkDateInsert> objExcelCon= list;

        GroupedData gdata = new GroupedData() { Calendardata = objExcelCon };

       Program p = new Program();

        p.CreateDocumentForCalendarData(gdata).Wait();
    }

    private async Task CreateDocumentForCalendarData(GroupedData ParsedJson)
    {
        this.client = new DocumentClient(new Uri(EndpointUri), PrimaryKey);

        await client.CreateDocumentAsync("dbs/{dbname}/colls/{collectionname}", ParsedJson);
    }

public class GroupedData {

    //could be weekly, monthly data
        public IList<BulkDateInsert> Calendardata { get; set; }
    }

    public class BulkDateInsert
    {
        public string CalendarDate { get; set; }
        public string Calendarday { get; set; }
        public bool isweekday { get; set; }
        public bool isweekend { get; set; }
    }
}