C#Api删除对象

时间:2016-07-29 20:47:18

标签: c# json http asp.net-web-api

我的WebAPI存在问题。

我有以下型号。

MODELA

Guid id;
String name;
Guid ModelBId;
virtual ModelB ModelB;

ModelB

Guid id;
String name;

我正在创建一个包含2个ModelA实例的列表,每个实例都有一个名称,并且对modelB具有相同的引用,例如:

obj1 = New ModelA("myName", "1edh-...");
obj2 = New ModelA("otherName", "1edh-...");

两个对象都引用相同的ModelB对象,因此,我将两个对象包含在列表中。

List<ModelA> myList = new List<ModelA>();
myList.Add(obj1);
myList.Add(obj2);

现在,如果我看一下&#34; myList&#34;在调试器中我可以看到对ModelB的两个引用,但是当我的控制器将它返回给我的客户端时,其中一个消失了。

[HttpGet]
public IHttpActionResult Get(string id)
    {
        try
        {
            var myList = _uow.functionality.Get(id);
            //myList contains two objects, just like the example
            return Ok(myList );
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

返回给我的用户的Json是以下

   [
  {$id: 1, 
    id: 'ed32-...', 
    name: 'myName', 
    ModelB: { $id: 2, 
              $ref: 1, 
              id: '', 
              name: ''}}, 
  {$id: 3, 
    id: 'e3df-...', 
    name: 'otherName', 
    ModelB: { $ref: 2 }}
]

为什么在将我的ModelB发送到我的客户端时将其从json中删除?

2 个答案:

答案 0 :(得分:1)

关于@dbc建议,我已经从

更改了json序列化
formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All;

formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
            = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

答案 1 :(得分:0)

恢复订单会不会有任何影响?也许尝试以不同的格式返回列表,例如一个直接的JSON对象。