带有JsonIgnoreAttribute的属性的Json.NET JsonSerializationException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有JsonIgnoreAttribute的属性的Json.NET JsonSerializationException相关的知识,希望对你有一定的参考价值。

我收到例外:

Newtonsoft.Json.JsonSerializationException:使用类型'DbGet.Service.Auth.AuthUserRegisterSagaData'检测到的自引用循环。路径'Tenant.CanRollback'。

    internal class AuthUserRegisterSagaData : ContainSagaData
{
    public AuthUserRegisterSagaData()
    {
        Tenant = new MultipartEntitySagaData<TenantEntity>();
        TenantUser = new MultipartEntitySagaData<TenantUserEntity>();
        Workspace = new MultipartEntitySagaData<WorkspaceEntity>();
        Workspace.CanRollback = () => true;
        TenantUser.CanRollback = () => Workspace.RollbackCommandStatus == CommandStatusEnum.Completed;
        Tenant.CanRollback = () => TenantUser.RollbackCommandStatus == CommandStatusEnum.Completed;
    }

    public string Email { get; set; }

    /// <summary>
    /// Is User Entity saved
    /// </summary>
    public bool IsUserCreated { get; set; }

    public Guid UserId { get; set; }

    public IdentityUserEntity Entity { get; set; }

    public MultipartEntitySagaData<TenantEntity> Tenant { get; set; }

    public MultipartEntitySagaData<TenantUserEntity> TenantUser { get; set; }

    public MultipartEntitySagaData<WorkspaceEntity> Workspace { get; set; }
}

public class MultipartEntitySagaData<TEntity>: MultipartSagaData
{
    public TEntity Entity { get; set; }      
}

public class MultipartSagaData
{
    public CommandStatusEnum CommandStatus { get; set; }

    public CommandStatusEnum RollbackCommandStatus { get; set; }

    [JsonIgnore]
    public Func<bool> CanRollback { get; set; }
}

我不明白为什么,因为我将此属性标记为不可序列化。

答案

你能展示一些关于你序列化的代码吗?是3级还是更少?如果您还在序列化内部类,那么我认为Tenant(将被序列化)在构造函数中给出了问题。

这里有一个相同错误的链接。希望它会有所帮助。 Same error

以上是关于带有JsonIgnoreAttribute的属性的Json.NET JsonSerializationException的主要内容,如果未能解决你的问题,请参考以下文章

带有属性注释的属性文件生成

带有 NSLinkAttributeName 的 NSAttributedString 中的颜色属性被忽略

是啥导致了带有强化 xcodebuild(Objective-C)的未知属性属性“类”?

兼容性—IE6/7下带有overflow:hidden属性的父级元素包不住带有position:relative属性的子元素

带有核心数据的 NSPredicate,在字符串属性中搜索带有边界的单词

带有重音字符的 Java 属性文件