我的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中删除?
答案 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对象。