【发布时间】:2018-07-12 13:48:39
【问题描述】:
我想将整个 SQL 数据库迁移到 Cosmos DB。在这个过程中 SQL 表列之一具有如下序列化数据
[{"Id":"1","Type":"Phone","HeaderLabel":"HQ - Main Line","ContactNumber":"+9122222222"}]
序列化的数据代表一个类
public class ContactNumber
{
public string ContactNumberId { get; set; }
public string Type { get; set; }
public string HeaderLabel { get; set; }
public string ContactNumber { get; set; }
}
在将数据保存在 sql 中时,我必须为类执行序列化和反序列化。
public string _ContactNumbers { get; set; }
public List<ContactNumber> ContactNumbers
{
get { return _ContactNumbers == null ? null : JsonConvert.DeserializeObject<List<ContactNumber>>(_ContactNumbers); }
set { _ContactNumbers = value == null ? null : JsonConvert.SerializeObject(value); }
}
使用迁移工具后,它会像这样更新
"ContactNumbers":"[{\"Id\":\"1\",\"Type\":\"Phone\",\"HeaderLabel\":\"HQ - Main Line\",\"ContactNumber\":\"+9122222222\"}]"
类保持不变。从 cosmos DB 获取数据时,我没有执行任何序列化和反序列化。
public List<ContactNumber> ContactNumbers
在获取数据时会引发错误
Error converting value "[{"Id":"1","Type":"Phone","HeaderLabel":"HQ - Main Line","ContactNumber":"+9122222222"}]" to type 'System.Collections.Generic.List`1[CosmosDB.Models.ContactNumber]'. Path 'ContactNumber', line 1, position 2411.
错误是由于迁移后添加的字符串中的 Extra \ 字符造成的。
我不想对 cosmos DB 中的类进行序列化和反序列化,因为没有必要这样做。
那么在将数据从 SQL 数据库迁移到 Cosmos DB 文档时如何避免额外的 \?
【问题讨论】:
-
请提供一些其他详细信息,例如指向您正在使用的特定工具的指针、如何调用它等。
-
使用 Azure Cosmos DB 数据迁移工具docs.microsoft.com/en-us/azure/cosmos-db/import-data@BrendanGreen
-
那么你用的是哪个API,你用的是GUI还是命令行版本?
-
GUI @BrendanGreen
-
好吧,你真的没有付出太多的努力。我已经重读了您的问题,并且您有一个已序列化为字符串的类。那些前导斜杠是为了逃避引号字符。也就是说,生成的 JSON 有一个属性
ContactNumbers,并包含一个字符串值,其中嵌入了需要转义的引号。话虽如此,您还没有说明为什么这是一个问题。
标签: azure azure-cosmosdb data-migration