我遇到了一些与我的WebAPI有关的问题。C#Api删除对象
我有以下型号。
MODELA
Guid id;
String name;
Guid ModelBId;
virtual ModelB ModelB;
ModelB
Guid id;
String name;
我创建与MODELA的2个实例的列表,每个实例有一个名字和具有相同的参考modelB,为例:
obj1 = New ModelA("myName", "1edh-...");
obj2 = New ModelA("otherName", "1edh-...");
两个对象都引用相同的ModelB对象,所以我将这两个对象包含在列表中。现在
List<ModelA> myList = new List<ModelA>();
myList.Add(obj1);
myList.Add(obj2);
,如果我看“myList中”在调试器,我可以看到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 }}
]
为什么它从JSON中删除我的ModelB它发送给我的客户?
也许我不明白。它看起来像'ModelB'仍然存在于生成的json中。 –
@SamIam是的,ModelB在第一个关系上返回,但它被排除在第二个关系之外,并且被$ ref替换为第一个关系的$ id –
Web API使用[tag:json.net]。某处必须启用['PreserveReferencesHandling'](http://www.newtonsoft.com/json/help/html/PreserveReferencesHandlingObject.htm)。该设置允许在图中的对象之间进行多对多的引用的序列化,方法是在图中第一次遇到'$ id'属性时标记每个对象,然后为随后的引用序列化一个'$ ref'属性。 – dbc