当我尝试访问 MongoDB 领域中用户的 CustomData 时,出现此错误:
An error occurred while logging in: Element 'username' does not match any field or property of class Datauser.
我正在使用Realm的Unity和.NET Sdk。
这是Realm提供的SyncModel
using System;
using System.Collections.Generic;
using Realms;
using MongoDB.Bson;
public partial class Datauser : IRealmObject
{
[MapTo("_id")]
[PrimaryKey]
public ObjectId? Id { get; set; }
[MapTo("avatar")]
public string? Avatar { get; set; }
[MapTo("user")]
public string? User { get; set; }
[MapTo("username")]
public string? Username { get; set; }
}
这是我用来检索数据的代码
await _realmUser.RefreshCustomDataAsync();
Datauser customData = _realmUser.GetCustomData<Datauser>();
Debug.Log(customData);
CustomData 已启用,将其连接到数据库的字段是“user”。 另外,使用此代码:
await _realmUser.RefreshCustomDataAsync();
var customData = _realmUser.GetCustomData();
Debug.Log(customData);
它有效,我将所有内容都以字符串形式返回。 解决方案?
问题在于 Realm SDK 使用两种不同的技术将数据映射到 C# 对象。对于数据库/同步用例,它使用 RealmObjects 及其各自的属性(即
MapTo
),但对于 json/bson 数据的反序列化,它使用 MongoDB.Bson 库,该库具有自己的数据映射属性 - 即 BsonElement
。我们意识到这是违反直觉的,并计划在 SDK 的未来版本中解决这个问题,但现在您需要对您的类进行双重注释,或者对从 json 反序列化的 API 使用专用的 bson 注释模型(即任何具有重载返回 BsonDocument
)。更具体地说,要解决您眼前的问题,请将您的模型更改为:
public partial class Datauser : IRealmObject
{
[MapTo("_id")]
[PrimaryKey]
public ObjectId? Id { get; set; }
[MapTo("avatar")]
[BsonElement("avatar")]
public string? Avatar { get; set; }
[MapTo("user")]
[BsonElement("user")]
public string? User { get; set; }
[MapTo("username")]
[BsonElement("username")]
public string? Username { get; set; }
}