如何将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}

如何将Object转换回它的类

不确定tobject的目的是什么…

在c#中,如果您想检查空指针,您可以简单地执行object o = myDerivedDerived d = (Derived)oDerived 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");
    }

我知道这只是一个技巧,不是一个专业的解决方案,但只是暂时在我的情况下工作。