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