我在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]属性
我做错了什么你的帮助将是值得赞赏的
答案 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类型来解决此问题。