可序列化对象排除从客户端调用我的公共属性

本文关键字:我的 属性 调用 客户端 序列化 对象 排除 | 更新日期: 2023-09-27 18:04:32

我在Asp.net web api中工作,我的模型类如下

[Serializable]    
public class Workspace
{
    private string strID;
    public string strName;
    public string ID
    {
        get { return strID; }
        set { strID = value; }
    }
    public string Name
    {
        get { return strName; }
        set { strName = value; }
    }
}

我在控制器

中有下列Get方法
public Workspace GetWorkSpace()
    {
        if (objWorkspace == null)
        {             
            objWorkspace = new Workspace();
            objWorkspace.ID = Guid.NewGuid().ToString();
            objWorkspace.Name = "Workspace 1";
        }
        return objWorkspace;
    }

我试图得到这个对象使用Jquery如下

var uri = 'api/workspace/GetWorkspace';
    $(document).ready(function () {
        $.getJSON(uri)
        .done(function (data) {
            $('#workspaceId').append(data.ID);
            $('#workspaceName').append(data.Name);
        });
    });

我在data中获得响应对象,但它排除了我的公共属性"ID"answers"Name",如下所示

strID: "a0a523c6-f657-40df-b957-114b87de02f8"
strName: "Workspace 1"
__proto__: Object

正如你看到的响应对象get "strID, and strName",模型类中的私有变量,响应数据中应该是ID和Name。此外,如果我从我的模型类中删除[Serializable]属性,我将得到所需的结果。谁能给我解释一下,我对[Serializable]属性做错了什么?

我很感激你的帮助

可序列化对象排除从客户端调用我的公共属性

我使用自定义的ContractResolver,设置:

public MyResolver()
{
    IgnoreSerializableAttribute = true;
}

和这里记录的DefaultContractResolver。IgnoreSerializableAttribute属性:

true表示在序列化和反序列化类型时将忽略SerializableAttribute属性;否则,假的。

如果你不打算实现自定义解析器,你可以这样做:

  • ASP。. NET Web API和[Serializable]类

从源代码中引用的代码片段:

((DefaultContractResolver)config
     .Formatters
     .JsonFormatter
     .SerializerSettings
     .ContractResolver
).IgnoreSerializableAttribute = true;

或者,您可以通过用[JsonObject]装饰Workspace类型来解决这个问题。