我有一个传入的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的相应部分添加到object中,以便:
第一个对象将包含{"MyInt":1,"MyBool":0}
第二个对象将包含{"MyInt":2,"MyBool":0}
第三个对象将包含{"MyInt":3,"MyBool":1}
在他们的JSON
财产
我会感激任何帮助!
答案 0 :(得分:1)
这是一种方法,但它不能保持原始的JSON - 但它确实提供了原始JSON的静态记录(但没有原始值的确切格式 - 即Bool可能是0 / 1或真/假):
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,那么你可能想找到一种更有效的方法。可能有一种方法可以使用linq“更新”,而不是创建新列表。
答案 1 :(得分:0)
好的,我找到了答案。我不知道我可以将消息反序列化为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()));
}
}
}