如何将Object转换回它的类
本文关键字:转换 Object | 更新日期: 2023-09-27 18:08:34
我有一个返回对象的方法,我需要改变对象的一些值,所以我需要将对象转换回它的类。但是无论我到目前为止尝试了什么,它总是给出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}
不确定tobject的目的是什么…
在c#中,如果您想检查空指针,您可以简单地执行object o = myDerived
和Derived d = (Derived)o
或Derived d = o as Derived
。如果它不起作用,你的继承链就被打破了。就这么简单。
代替
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 :'( ");
Try
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;
或者如果您想从GetProfile()
返回JObject
,那么尝试将GetProfile()
中的返回语句更改为如下内容:
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>();
我在这里玩了一个技巧,安全地修改了我的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");
}
我知道这只是一个技巧,不是一个专业的解决方案,但只是暂时在我的情况下工作。