如何将Object转换回它的类

时间:2015-08-19 08:43:28

标签: c# object casting

我有一个返回对象的方法,我需要更改一些对象的值,所以我需要将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}

4 个答案:

答案 0 :(得分:1)

不确定ToObject的用途是什么......

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

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