为什么Newtonsoft.Json.JsonConvert.SerializeObject将“ _repository”添加到列表中的每个项目?

时间:2019-11-01 19:06:45

标签: c# .net json json.net

我有一个简单的方法,如下所示:

public partial class PEUploadBookHistory: DataAccessBase
{
    public string Get()
    {
        List<PEUploadBookHistory> histories = _repository.GetList<PEUploadBookHistory>().ToList();
        string jsonHistories = JsonConvert.SerializeObject(histories);
        return jsonHistories;
    }

    // Other methods like Post and Put, etc
}

_repository.GetList是一个Dapper存储库:

public IEnumerable<T> GetList<T>()
{
    IEnumerable<T> entities;
    using (var connection = OpenConnection(_connectionStringName))
    {
        entities = connection.GetList<T>();
    }
    return entities;
}

第一个方法返回的json字符串如下:

[
  {
    "_repository": {},
    "UploadBookHistoryId": 5467,
    ... other properties ...
  }
]

我不明白为什么要添加"_repository": {},。那不是PEUploadBookHistory吗?那是哪里来的为什么?以及如何更改?

这是其余的部分内容:

[Table("PE_UploadBookHistory")]
public partial class PEUploadBookHistory
{
    [Key]
    public virtual int UploadBookHistoryId { get; set; }
    ... other coluomns ...
}

这是DataAccessBase

public class DataAccessBase
{
    public Repository _repository = new Repository("SQLConnection");
}

1 个答案:

答案 0 :(得分:2)

JsonIgnore装饰此属性:

[JsonIgnore]
public Repository _repository = new Repository("SQLConnection");

或者,您可以将其设为不公开。

或者,对数据库和JSON使用不同的模型。

如果这些解决方案都不起作用,则可以使用自定义Json合同类,这将花费更多的工作。