可序列化对象排除从客户端调用我的公共属性
本文关键字:我的 属性 调用 客户端 序列化 对象 排除 | 更新日期: 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类型来解决这个问题。