serializable对象排除了我从客户端调用的公共属性

时间:2014-05-22 11:30:44

标签: c# javascript asp.net-web-api

我在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);

        });

    });

我在数据中获取了响应对象,但它排除了我的公共属性“ID”和“名称”,如下所示

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

如您所见,响应对象获取“strID和strName”, 在模型类中是私有变量,而在响应数据中应该是 ID和Name , 此外,如果我从我的模型类中删除[Serializable]属性,我将得到所需的结果。 任何人都可以解释我,以及[Serializable]属性

我做错了什么

你的帮助将是值得赞赏的

2 个答案:

答案 0 :(得分:0)

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

public MyResolver()
{
    IgnoreSerializableAttribute = true;
}

如此处DefaultContractResolver.IgnoreSerializableAttribute Property所述:

  

如果序列化和反序列化类型时将忽略SerializableAttribute属性,则为true;否则为false。否则,错误。

如果您不打算实施自定义解析器,可以像这样执行:

该消息来源引用的片段:

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

答案 1 :(得分:0)

或者,您可以通过使用[JsonObject]修饰Workspace类型来解决此问题。