2015-12-16 117 views
3

如果我有Json对象,我想映射到一个具体的对象,我该怎么做?如何使用Json对象映射ValueInjecter?

public class Student 
    { 
     public string Name { get; set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var o = new JObject {{"Name", "Jim"}}; 
      Student student = new Student(); 


      student.InjectFrom(o); 
     } 
    } 

此结果为空。当我预计“吉姆”被设置。

+0

IIRC,'ValueInjecter'设计用于2个混凝土t yped实例。在你的例子中,我怀疑'ValueInjecter'可以从JSON对象推断出属性。 –

+0

JObject实现了一个'IDictionary'这就是为什么你可以拥有某种动态属性,但ValueInjecter是设计映射属性的同名,它不会查看JOject Dictionary – Thomas

+0

我该如何解决这个问题? Json键与您的示例中的名称相同。 – chobo2

回答

0

由于您使用无论如何,你可以直接从JSON使用JsonConvert.PopulateObject()填充对象:

JsonConvert.PopulateObject(json, student); 

或者,如果你愿意,你可以添加一些扩展方法:

public static class JsonExtensions 
{ 
    public static void PopulateFromJson<T>(this T target, string json) where T : class 
    { 
     if (target == null || json == null) 
      throw new ArgumentException(); 
     JsonConvert.PopulateObject(json, target); 
    } 

    public static void PopulateFromJson<T>(this T target, JToken json) where T : class 
    { 
     if (target == null || json == null) 
      throw new ArgumentException(); 
     using (var reader = json.CreateReader()) 
      JsonSerializer.CreateDefault().Populate(reader, target); 
    } 
} 

,做

 var o = new JObject { { "Name", "Jim" } }; 
     Student student = new Student(); 
     student.PopulateFromJson(o);