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

Eco自定义服务中调用含AsTaJson派生属性报错的解决方法咨询

解决方法

空引用异常触发原因:AsTaJson是ITaJsonService提供的扩展方法,不支持直接写在类的派生属性DerivationOCL规则中。派生属性求值时仅加载基础OCL运行时,不会自动初始化TaJson序列化所需的服务上下文,因此会抛出空引用错误。

正确实现流程如下:

  • 第一步:移除Class1中使用AsTaJson的派生属性,不需要通过派生属性中转Json结果
  • 第二步:在自定义的IMyService中新增对应方法,直接通过ITaJsonService生成序列化结果

更新后的服务代码示例:

public interface IMyService
{
    int Class1Count();
    // 新增获取Json的方法
    string GetFirstClass1Json();
}

public class MyServiceClass : IMyService
{
    private IEcoServiceProvider ServiceProvider { get; set; }

    public MyServiceClass(IEcoServiceProvider serviceProvider)
    {
        ServiceProvider = serviceProvider;
    }
    public int Class1Count()
    {
        var v = ServiceProvider.GetEcoService<IOclService>().Evaluate("Class1.allInstances->size");
        return (int)v.AsObject;
    }

    // 新增方法实现
    public string GetFirstClass1Json()
    {
        var oclService = ServiceProvider.GetEcoService<IOclService>();
        var class1Instance = oclService.Evaluate("Class1.allInstances->first").AsObject as Class1;
        // 空判断避免无数据时报错
        if (class1Instance == null)
        {
            return "{}";
        }
        // 获取ITaJsonService服务
        var taJsonService = ServiceProvider.GetEcoService<Eco.Services.TaJson.ITaJsonService>();
        // 参数依次为:要序列化的对象、已定义的ViewModel名称、是否序列化关联对象
        return taJsonService.Generate(class1Instance, "SampleViewModel", false);
    }
}
  • 第三步:控制器中直接调用新增的方法即可,原有控制器结构不需要修改:
[HttpGet("getclass1json")]
public string GetClass1Json()
{
    using (EcoSpace1 es = new EcoSpace1())
    {
        es.Active = true;
        return es.MyService.GetFirstClass1Json();
    }
}

异常排查注意点:

  1. 确认EcoSpace配置中已经注册了TaJson相关服务,在EcoSpace的ConfigureServices方法中添加如下注册逻辑即可:
Eco.Services.TaJson.TaJsonServiceRegistrator.RegisterServices(serviceCollection);
  1. 确认模型中已经存在名称为SampleViewModel的ViewModel定义,名称大小写完全匹配,且包含需要序列化的字段配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:36:05