我有这种格式的序列化JSON:
private void btnAClicked(){};
private void btnBClicked(){};
private void btnCClicked(){};
JButton c = new JButton("c");
c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnCClicked();
btnAClicked();
btnBClicked();
}
});
如何将其反序列化为单个匿名对象,如下所示:
string json = @"[{"Name": "std_id","Value": "111"}, {"Name": "cust_id","Value": "444"}]"
答案 0 :(得分:1)
为什么是匿名对象?你应该反序列化为类似下面的类型
public class RootObject
{
public string Name { get; set; }
public string Value { get; set; }
}
那么你实际拥有的是IEnumerable<RootObjct>
。您可以使用Linq并从中选择First()
,如
RootObject = RootObjects.FirstOrDefault()
答案 1 :(得分:1)
您可以将其反序列化为动态。像这样:
var serializer = new JavaScriptSerializer();
var deserializedResult = serializer.Deserialize<dynamic>(json);
参考:
答案 2 :(得分:0)
var definition = new { Name = "" };
string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);
Console.WriteLine(customer1.Name);
string json2 = @"{'Name':'Mike'}";
var customer2 = JsonConvert.DeserializeAnonymousType(json2, definition);
Console.WriteLine(customer2.Name);
来源http://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm
答案 3 :(得分:0)
我知道这个解决方案并不完美,但它适用于您提供的示例,并在您的示例中返回类似paramObj
的结果。
我们的想法是创建一个自定义的Json转换器。
首先,让我们创建一个DTO类来呈现一个包含JSON的名称 - 值项。
public class NameValueJsonItem
{
public string Name { get; set; }
public string Value { get; set; }
}
转换器实施:
public class DynamicJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token == null || token.Type != JTokenType.Array)
{
return null;
}
List<NameValueJsonItem> parsedJson = token.ToObject<List<NameValueJsonItem>>();
ExpandoObject result = new ExpandoObject();
foreach (NameValueJsonItem item in parsedJson)
{
if (!String.IsNullOrEmpty(item.Name))
{
(result as IDictionary<string, object>)[item.Name] = item.Value;
}
}
return result;
}
public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
当然,如果您愿意,可以通过在方法中添加一些异常处理等来使其更安全。
您可以像这样使用此转换器:
dynamic result = JsonConvert.DeserializeObject<dynamic>(json, new DynamicJsonConverter());
希望它会有所帮助。