egametang/ET · error · Exception
from json error: {str} {e}
Error message
from json error: {str}
{e} What it means
Thrown by MongoHelper.FromJson<T>(string) when BsonSerializer.Deserialize<T>(str) fails. The helper re-wraps into a new Exception whose message includes the raw input string and the original exception text; here it DOES preserve the inner exception via ', e' (line 64), so the stack trace survives.
Source
Thrown at Packages/cn.etetet.core/Scripts/Core/Share/Serialize/MongoHelper.cs:64
supportInitialize.BeginInit();
}
return obj.ToJson(settings);
}
catch (Exception e)
{
throw new Exception($"to json error {obj.GetType().FullName}\n{e}");
}
}
public static T FromJson<T>(string str)
{
try
{
return BsonSerializer.Deserialize<T>(str);
}
catch (Exception e)
{
throw new Exception($"from json error: {str}\n{e}");
}
}
public static object FromJson(Type type, string str)
{
try
{
return BsonSerializer.Deserialize(str, type);
}
catch (Exception e)
{
throw new Exception($"from json error: {str}\n{e}");
}
}
public static byte[] Serialize(object obj)
{
tryView on GitHub (pinned to 5cab01f7a8)
Solutions
- Inspect the inner exception (preserved) and the printed input string to find the offending field/token.
- Align T with the JSON: add missing members, register BsonClassMap, or add [BsonIgnoreExtraElements] for forward-compat.
- Validate the string is non-empty and well-formed JSON before deserializing.
- For migrated types use [BsonDefaultValue]/[BsonIgnoreExtraElements] to tolerate schema drift.
Example fix
// before
var e = MongoHelper.FromJson<MyEntity>(json);
// after
if (string.IsNullOrWhiteSpace(json)) throw new ArgumentException("empty json", nameof(json));
var e = MongoHelper.FromJson<MyEntity>(json); Defensive patterns
Strategy: validation
Validate before calling
if (string.IsNullOrWhiteSpace(str)) throw new ArgumentException("json is empty", nameof(str)); Try / catch
try { return MongoHelper.FromJson<T>(str); }
catch (Exception e) { Log.Error($"FromJson<{typeof(T).Name}> failed: {e}"); throw; } Prevention
- Tolerate schema drift with [BsonIgnoreExtraElements] on persisted types.
- Validate input is non-null/non-empty first.
- Keep a schema version field in persisted JSON.
When it happens
Trigger: Deserializing malformed JSON, JSON whose values do not map onto T (wrong field types, missing required fields), a JSON containing an unknown _t discriminator, or passing null/empty str.
Common situations: Loading saved entity state from JSON, reading config/network messages, schema migration where T changed but stored JSON did not, hand-edited JSON files, null strings after a failed read.
Related errors
- to json error {obj.GetType().FullName} {e}
- Serialize error {obj.GetType().FullName} {e}
- Serialize error {message.GetType().FullName} {e}
- from bson error: {type.FullName} {bytes.Length}
- from bson error: {type.FullName} {bytes.Length} {index} {cou
AI-assisted analysis of egametang/ET@5cab01f7a8 (2026-08-13).
Data as JSON: /api/errors/2bad1961842735f8.
Report an issue: GitHub.