System.Text.Json反序列化对象列表[关闭]

问题描述 投票:0回答:1

我是 C# 的新手,主要尝试遵循我在网上找到的示例。希望有人能在下面解释..

我在 json 中有一个对象列表,我正在尝试使用 System.Text.JSON 反序列化。 该类看起来像这样,下面列出了 json。

        public class Message
    {
        public string RawMessage { get; set; }
        public DateTime DateTime { get; set; }
        public string SenderCompId { get; set; }
        public string TargetCompId { get; set; }
        public string TargetSubId { get; set; }
        public bool Sent { get; set; }

        public Message(string senderCompId, string targetCompId, string targetSubId, string rawstring, DateTime datetime, bool sent)
        {
            SenderCompId = senderCompId;
            TargetCompId = targetCompId;
            TargetSubId = targetSubId;
            RawMessage = rawstring;
            DateTime = DateTime.Now;
            Sent = false;
        }
    }
}

//json
[
  {
    "rawMessage": "adsfasf a\u00F6dsij\u00F6oi \u00F6jadf",
    "dateTime": "2023-03-24T10:04:05.6560707+01:00",
    "senderCompId": "BB",
    "targetCompId": "PRIOR",
    "targetSubId": "EMSX",
    "sent": false
  }
]

我正在尝试像这样反序列化

JsonSerializerOptions JsonSerializerOptions = new()
  {
       PropertyNameCaseInsensitive = true
  };

string json = File.ReadAllText(FullFilepath);
     
List<Message>? messages = JsonSerializer.Deserialize<List<Message>>(json, JsonSerializerOptions);

但它失败了

错误:类型“FixEngineLibrary.Model.Message”的反序列化构造函数中的每个参数都必须绑定到反序列化的对象属性或字段。每个参数名称必须与对象上的属性或字段相匹配。只有在启用“JsonSerializerOptions.IncludeFields”时才会考虑字段。匹配可以不区分大小写。

为什么?我需要注释 Message 类中的字段吗?我认为没有必要,因为我添加了不区分大小写的选项。我也尝试添加建议的选项 IncludeFields = true 但这没有帮助。此外 - 在这种情况下我根本没有得到那个选项。

任何帮助将不胜感激

c# json deserialization json-deserialization system.text.json
1个回答
0
投票

我在构造函数中发现了错误。我已将字段名从 rawString 更改为 rawMessage。显然,visual studio 中的“重命名”也没有更新参数名称。

© www.soinside.com 2019 - 2024. All rights reserved.