【问题标题】:Serialize list of objects with JSON.NET in C#在 C# 中使用 JSON.NET 序列化对象列表
【发布时间】:2019-02-01 17:31:41
【问题描述】:

我有一个看起来像这样的列表:

List<Product> products = new List<Product>();
Product p1 = new Product(1, "Apple", new Description("Red Apple"))
Product p2 = new Product(2, "Banana", new Description("Yellow Banana"))
products.Add(p1);
products.Add(p2);

产品如下所示:

//Product model
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Description descriptions { get; set; }

//Description model
public string description { get; set }

现在我想用 JSON.NET 将这个 List&lt;Product&gt; 序列化为 JSON。我试过了:

var json = JsonConvert.SerializeObject(products);

但我收到以下错误:

Newtonsoft.Json.JsonSerializationException: 'Self referencing loop detected for property 'Module' with type 'System.Reflection.RuntimeModule'.

我的Startup.cs 文件中还有以下行应该避免循环:

xy.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

任何想法我做错了什么?我可以提供更多/更好的信息吗? 在此先感谢:)

【问题讨论】:

  • 请用构造函数详细提供所有数据结构。唯一值得注意的是Product 构造函数采用单个Description,因此请提供所有必要的详细信息。
  • 你能谈谈Description吗?
  • 如果你的Description里面有Product,尝试在变量中添加[JsonIgnore],或者如果有任何对象引用了对象本身。
  • @DanielB 这不是完全相同的问题,因为我有另一个错误无法在您的帖子中解决

标签: c# nhibernate json.net asp.net-core-2.0


【解决方案1】:

你应该使用JsonConvert的默认设置而不是SerializerSettings

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2016-06-29
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多