onu*_*dam 5 c# dynamic google-cloud-datastore google-cloud-platform
我们的应用程序目前正在使用 MongoDb。我们的计划是使其与 Datastore 配合使用。在我们的应用程序中,有一些 API 调用,我们不知道它的响应是如何构建的。因此,我们使用动态类型。我们得到响应并将其按原样放入 Mongodb。
就我们所研究的而言,Google.Cloud.Datastore.V1 .Net SDK 促使开发人员使用结构化类型。我们必须创建一个实体,它具有带有预定义键名的某些属性。
如下所示:
MapField<string, Value> fields = new MapField<string, Value>();
fields.Add("d1", "string value");
fields.Add("d2", 30);
fields.Add("d3", 55);
var entity = new Entity
{
Key = key,
Properties = { fields }
};
Run Code Online (Sandbox Code Playgroud)
我已经尝试过将 API 响应设置为一个字段。不幸的是,它最终将响应保存为字符串。
有没有办法实现它?
我相信如果您考虑到不需要使用Properties 实体密钥,问题就会简化。
我根据您的示例执行了以下操作。请注意,正如您所见,我不是C#专家,但这确实有效:
string projectId = "MY-PROJECT";
string kind = "Task";
string name = "samplekey1";
DatastoreDb db = DatastoreDb.Create(projectId);
KeyFactory keyFactory = db.CreateKeyFactory(kind);
Key key = keyFactory.CreateKey(name);
var request = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
var entity = new Entity()
{
Key = key,
};
foreach(JProperty property in request.Properties())
{
entity[property.Name] = property.Value.ToString();
}
using (DatastoreTransaction transaction = db.BeginTransaction())
{
transaction.Insert(entity);
transaction.Commit();
};
Run Code Online (Sandbox Code Playgroud)
请注意,这不会保存每个键值的类型(所有值都是字符串)。如果您不需要稍后使用每个值的类型(即 Int、String...),那么这不是问题。
然而,这似乎是最简单的解决方案,它完成了使用每个值创建每个属性的工作。
| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |