反序列化数组时如何获取对象json

How to get object json when deserializing array

我有一个传入的 JSON,它包含一些对象的数组,例如 Foo。我用

反序列化它们
result = JsonConvert.DeserializeObject<List<Foo>>(message);

现在我想向 Foo 添加一个字符串 属性,它将存储它的 JSON(我收到),这样 Foo 看起来像:

    public class Foo
{
    public int MyInt { get; set; }
    public bool MyBool { get; set; }
    public string JSON { get; set; }
}

但我不知道我怎么能说 JSON.Net 它填充这样一个字段的方式..

UPD 我会澄清我想要什么。假设我收到 JSON:

[{"MyInt":1,"MyBool":0},{"MyInt":2,"MyBool":0},{"MyInt":3,"MyBool":1}]

这是 3 个对象的数组,我想在反序列化时将 json 的相应部分添加到对象,以便:

第一个对象将包含 {"MyInt":1,"MyBool":0}

第二个对象将包含 {"MyInt":2,"MyBool":0}

第三个对象将包含 {"MyInt":3,"MyBool":1}

在他们的 JSON 属性

如有任何帮助,我将不胜感激!

这是一种方法,但它不能保持原样 JSON - 但它确实提供了原件的静态记录 JSON (但没有确切的格式原始值 - 即 Bool 可能是 0/1 或 true/false):

var message = @"[{""MyInt"":1,""MyBool"":0},{""MyInt"":2,""MyBool"":0},{""MyInt"":3,""MyBool"":1}]";
var foos = JsonConvert.DeserializeObject<List<Foo>>(message);
var t = JsonConvert.SerializeObject(foos[0]);
foos = foos.Select(s => new Foo() { MyBool = s.MyBool, MyInt = s.MyInt, JSON = JsonConvert.SerializeObject(s) }).ToList();

如果您要处理大量 Foos,那么您可能想找到一种更有效的方法。可能有一种方法 'update' 使用 linq,而不是创建新列表。

好的,我找到了答案。我不知道我可以将消息反序列化为 JArray,然后枚举它(干得好,newtonsoft:))。这是我最终得到的结果:

if (tokenType is JArray)
                {
                    var arr = JsonConvert.DeserializeObject(message) as JArray;
                    foreach (var item in arr)
                    {
                        try
                        {
                            var agentParameter = item.ToObject<Foo>();
                            agentParameter.JSON = item.ToString();
                            result.Add(agentParameter);
                        }
                        catch (Exception)
                        {
                            LogProvider.Error(string.Format("Failed to Deserialize message. Message text: \r\n {0}", item.ToString()));
                        }
                    }
                }