Asp.net Web Api序列化或反序列化问题

Asp.net Web Api序列化或反序列化问题,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我正在从我的服务调用我的Web Api控制器。我的模型对象已正确传递,但控制器中缺少我的对象导航属性 这是我的模型结构 public class ClassA { public String PropA { get; set; } public String PropB { get; set; } public virtual ClassB PropClassB { get; set; } } public class ClassB { public stri

我正在从我的服务调用我的Web Api控制器。我的模型对象已正确传递,但控制器中缺少我的对象导航属性

这是我的模型结构

public class ClassA
{
    public String PropA { get; set; }
    public String PropB  { get; set; }
    public virtual ClassB PropClassB { get; set; }
}

public class ClassB
{
    public string PropC { get; set; }
    public bool PropD { get; set; }
}
我调用控制器的方法是

private void publishReport(T perameter)
{
    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri(ConfigurationManager.AppSettings["GovernmentApiBaseUrl"]);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.PostAsJsonAsync<T>(_apiUrl, perameter).Result; // here I have a value in navigation property
    }
}

若您将属性声明为虚拟,那个么我假设EF正在将导航属性对象作为代理加载(延迟加载)。通过使nav属性非虚拟来关闭延迟加载。

如果将属性声明为虚拟,我假设EF正在将导航属性对象作为代理加载(延迟加载)。通过使nav属性非虚拟来关闭延迟加载。

您能确认json包含
ClassB
?我在本机.net json序列化程序json.net(默认情况下使用Web API)通信方面遇到一些问题,因此请尝试在两侧使用json.net。上述代码在我的机器上运行良好(可以序列化或反序列化nav属性),我认为问题不在于上述代码。我高度怀疑您是否使用延迟加载功能从EF获取记录,请尝试使用获取记录并在您的终端再次检查我使用的是使用实体的急切加载。include()您可以共享更多详细信息,因为上面的代码在一般情况下不会中断,我希望您在client.postsjsonasync(_apirl,perameter).Result中通过了ClassA而不是t。您能确认json包含
ClassB
?我在本机.net json序列化程序json.net(默认情况下使用Web API)通信方面遇到一些问题,因此请尝试在两侧使用json.net。上述代码在我的机器上运行良好(可以序列化或反序列化nav属性),我认为问题不在于上述代码。我高度怀疑您是否使用延迟加载功能从EF获取记录,请尝试使用获取记录并在您的终端再次检查我使用的是使用实体的急切加载。include()您可以共享更多详细信息,因为上面的代码在一般情况下不会中断,我希望您在client.postsjsonasync(_apiUrl,perameter.Result)中传递了ClassA而不是t。
[HttpPost]
public HttpResponseMessage PublishPOBReport([FromBody] ClassA parameter) // here parameter have all the values but the navigation property is null
{
    return new HttpResponseMessage() { StatusCode = HttpStatusCode.OK };
}