You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中使用Realm .NET SDK获取用户CustomData时遇字段匹配错误

解决Realm .NET SDK获取CustomData时的字段匹配错误

在Unity中使用Realm .NET SDK访问MongoDB Realm用户的CustomData时,出现错误:

An error occurred while logging in: Element 'username' does not match any field or property of class Datauser.

当前使用的Realm同步模型代码:

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);

使用无泛型方法可正常获取JSON字符串:

await _realmUser.RefreshCustomDataAsync();
var customData = _realmUser.GetCustomData();
Debug.Log(customData);

已知CustomData已启用,关联数据库字段为user。


解决方案

方案1:手动反序列化并忽略未知字段

Realm .NET的GetCustomData<T>默认采用严格反序列化规则,JSON中存在模型未定义的字段就会报错。可以先获取原始JSON字符串,再用自定义配置反序列化:

await _realmUser.RefreshCustomDataAsync();
var customDataStr = _realmUser.GetCustomData();
// 配置忽略未知字段,完成反序列化
var customData = System.Text.Json.JsonSerializer.Deserialize<Datauser>(customDataStr, 
    new System.Text.Json.JsonSerializerOptions { IgnoreUnknownFields = true });
Debug.Log(customData);

方案2:补充模型的字段映射

检查GetCustomData()返回的JSON字符串,确认所有存在的字段,将未在Datauser中定义的字段补充到模型里,并添加[MapTo]映射。例如如果JSON包含email字段,就添加:

[MapTo("email")]
public string? Email { get; set; }

方案3:修改模型的序列化规则

在Datauser类上添加属性,允许模型接受未定义的字段:

using System;
using System.Collections.Generic;
using Realms;
using MongoDB.Bson;

[RealmSchema(OptionalProperties = new[] { "*" })]
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; }
}

问题核心原因

GetCustomData<T>反序列化时,返回的CustomData JSON中包含Datauser模型未定义的字段(或字段映射不匹配),而默认序列化规则不允许未知字段存在。无泛型方法仅返回原始JSON字符串,因此不会触发校验错误。

内容的提问来源于stack exchange,提问作者Filippo Murolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:26:25