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

Blazor中JSInterop传入JSON反序列化不完整问题排查

可能的原因及解决方法

1. 自定义日期转换器的问题

  • 确认End属性是否同样标记了[JsonConverter(typeof(TZDateJsonConverter))],如果仅给Start添加转换器,End会因无法解析嵌套日期结构返回null。
  • 检查TZDateJsonConverter的Read方法逻辑:JS返回的start/end是含多层d结构的嵌套对象,转换器需要逐层解析d内的字段(如d.year/d.month),若逻辑只处理单层结构,会导致解析失败返回null。

2. JS对象转JSON字符串的方式错误

你在C#中调用eventBeingModified.ToString()大概率没得到有效JSON:JS对象直接调用toString()会返回[object Object],而非标准JSON字符串。正确做法是在JavaScript端先用JSON.stringify(eventBeingModified)将对象序列化为JSON字符串,再通过JSInterop传给C#,之后再执行反序列化。

3. TUIEvent类的属性定义问题

  • 检查End和IsVisible是否有public setter:比如public TZDate End { get; set; }、public bool IsVisible { get; set; }。若只有getter,JsonSerializer无法为属性赋值,会导致End为null、IsVisible保持默认值(false)。
  • 确认属性类型匹配:如果JSON中isVisible是字符串类型(如"true"/"false"),默认反序列化器不会自动转换,需添加自定义布尔转换器,或修改JS端传递原生布尔值。

4. 属性名称匹配问题

即使开启了PropertyNameCaseInsensitive=true,仍需确认JSON字段名与C#属性名拼写完全一致:

  • 比如JSON中布尔字段是visible而非isVisible,C#的IsVisible无法匹配;
  • 检查JSON中的end字段是否存在且非null,若JS返回的end为undefined,反序列化后End会是null。

排查步骤建议

  1. 打印eventBeingModified.ToString()的实际输出,确认是否为有效JSON,以及字段名、类型是否符合预期;
  2. 单独测试TZDateJsonConverter:构造包含end结构的JSON字符串,直接调用JsonSerializer.Deserialize<TZDate>(endJson, converter),验证转换器逻辑是否正确;
  3. 暂时移除自定义转换器,用默认反序列化测试End能否被解析为嵌套对象,排查是否为转换器导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:33:25