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



我有一个传入的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();

如果你正在与很多Foo打交道,那么你可能想找到一种更有效的方法。可能有一种方法可以使用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: rn {0}", item.ToString()));
                        }
                    }
                }

相关内容

  • 没有找到相关文章

最新更新