我有一个返回对象的方法,我需要更改一些对象的值,所以我需要将Object转换回它的类。但是到目前为止,无论我尝试过什么,总是给予null。
[HttpGet]
public Object GetProfile(string id)
{
try
{
var profileProxy = new ProfileProxy{
ReturnMessage = "";
}
return new { Profile = profileProxy };
}
}
[HttpPost]
public Object SaveProfile(JObject profile)
{
var profileProxy = profile.ToObject<ProfileProxy>();
var returnProfile = GetProfile(profileProxy.Id.ToString()) as JObject;
var rp = returnProfile.ToObject<ProfileProxy>();
rp.ReturnMessage = "New Message";
return new { Profile = rp };
}
我正在使用SaveProfile方法。但是如果我把它转换为JObject,那么returnProfile总是给出null。 有没有人有想法如何将它转回ProfileProxy类? 感谢。
如果没有施放任何东西,GetProfile(id)
会返回此内容。
{ Profile = {ProfileProxy} }
Profile: {ProfileProxy}
答案 0 :(得分:1)
不确定ToObject的用途是什么......
在C#中,如果您需要检查空指针,则可以执行object o = myDerived
和Derived d = (Derived)o
或Derived d = o as Derived
。如果它不起作用,你的继承链就会被破坏。就这么简单。
答案 1 :(得分:0)
而不是
var rp = returnProfile.ToObject<ProfileProxy>();
这样做:
if(returnProfile is ProfileProxy)
{
var p = (ProfileProxy)returnProfile;
//work with p
p.ReturnMessage = "New Message";
return new { Profile = p };
}
else
MessageBox.Show("This doesn't seem to be the right class :'( ");
答案 2 :(得分:0)
尝试
var rp = GetProfile(profileProxy.Id.ToString()) as ProfileProxy;
而不是
var returnProfile = GetProfile(profileProxy.Id.ToString()) as JObject;
var rp = returnProfile.ToObject<ProfileProxy>();
在GetProfile
中你需要替换
return new { Profile = profileProxy };
与
return profileProxy;
或者,如果您想从JObject
返回GetProfile()
,请尝试将GetProfile()
中的return语句更改为:
return new JObject(new { Profile = profileProxy });
保持SaveProfile
方法不变
第三种方法
如果您根本无法更改GetProfile
方法,请尝试以下操作。在SaveProfile
而不是
var returnProfile = GetProfile(profileProxy.Id.ToString()) as JObject;
试
var returnProfile = new JObject(GetProfile(profileProxy.Id.ToString()));
你也可能需要改变
var rp = returnProfile.ToObject<ProfileProxy>();
类似
var rp = returnProfile["Profile"].ToObject<ProfileProxy>();
答案 3 :(得分:0)
我在这里玩了一个技巧,并安全地修改了我的GetProfile
类,所以现在我不需要将对象强制转换为上一个类。这是我修改过的代码。
[HttpGet]
public Object GetProfile(string id, string returnMessage = "")
{
try
{
var profileProxy = new ProfileProxy
{
ReturnMessage = returnMessage
};
return new { Profile = profileProxy };
}
catch (Exception ex)
{
ex.LogError();
throw;
}
}
[HttpPost]
public Object SaveProfile(JObject profile)
{
var profileProxy = profile.ToObject<ProfileProxy>();
var returnProfile = GetProfile(profileProxy.Id.ToString()) as JObject;
return GetProfile(profileProxy.Id.ToString(), "New Message");
}
我知道这只是一个技巧,而不是一个专业的解决方案,但暂时只是在我的情况下工作。