从azure保存磁盘信息:
var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal("myclientId", "mytenant", "mysecretId", AzureEnvironment.AzureGlobalCloud);
var azure = Azure.Authenticate(credentials).WithSubscription("mySubscription");
var groupName = "myResourceGroup";
var vmName = "myVM";
var location = Region.USWest;
var vm = azure.Disks.List();
Console.WriteLine("Getting information about the virtual machine...");
MongoClient client = new MongoClient("mylocalhost");
IMongoDatabase database = client.GetDatabase("VM");
var collection = database.GetCollection<IDisk>("Disk ");
collection.InsertManyAsync(vm);
当我将它们保存到MongoDB时,我得到一个错误:
超过最大序列化深度(被序列化的对象是否有循环引用?).
我在这里做错什么了?
最佳答案
听起来好像从那个api返回的IDisk
正在解析成一个mongodb不太满意的循环图。那么,最简单的修复方法是:不要序列化IFile
-毕竟,它不是您的类型,您无法控制它。相反,创建一个你自己的类型,上面有你想要的东西,然后序列化。例如:
sealed class MyDisk // TODO: rename me
{
public string Key {get;set;}
public string Name {get;set;}
public string RegionName {get;set;}
public int SizeGB {get;set;}
// etc, but *only* the information you actually want, and *only* using
// primitive types or types you control
}
...
var disks = (from disk in azure.Disks.List();
select new MyDisk {
Key = disk.Key,
Name= disk.Name,
RegionName = disk.RegionName,
SizeGB = disk.SizeInGB,
// etc
}).ToList();
和store
disks
,我们知道它没有循环引用,因为我们控制它。关于c# - 在Mongodb中使用insertmany时如何避免“超出最大序列化深度”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57248673/