2012-08-02 61 views
0

我目前正在与第三方API整合的最佳方式,他们正在接受类似以下格式JSON字符串:什么是映射对象随机格式JSON字符串

{  
"test-specialism": null, 
"salaryCollection": [ 
    { 
     "id": 
       { 
        "jobtypeid": 1 
       }, 
"maxsalary": 564, 
     "minsalary": 123, 
     "salarycurrency": "GBP", 
     "salarytype": "A" 
    }, 
{ 
     "id": 
       { 
        "jobtypeid": 2 
       }, 
       "maxsalary": null, 
       "minsalary": null, 
       "salarycurrency": "GBP", 
       "salarytype": null 
      }, 
    }], 

}

这里是我的对象:

public class Salary { 
    public double Minimum { get; set; } 
    public double Maximum { get; set; } 
    public PaymentFrequency Frequency { get; set; } 
    public double Step { get; set; } 
    public int JobTypeId { get; set; } 
    public SalarySetting() {  } 

} 

public class Alert { 
    public string Specialism {get;set;} 
    public Salary Permanent { get; set; } 
    public Salary Temporary { get; set; } 
    public Salary Contract { get; set; } 
} 

正如您所看到的对象结构与JSON结构非常不一致。将对象转换为指定的json字符串的理想方法是什么?我已经尝试使用JSONProperty来映射属性,在这种情况下似乎不起作用。

+1

您应该创建一个类的结构,将有与json结构相同的嵌套层次,然后将已有的结构转换为新结构,然后序列化最后一个结构 – 2012-08-02 08:26:21

+0

那么为什么不用正确的模式创建对象? – Jodrell 2012-08-02 08:26:34

+0

为什么我们要把Id字段作为只有一个jobtypeid字段的Object? json结构对我来说没有意义,这就是为什么我试图为了映射而去创建类。 – Jack 2012-08-03 00:15:15

回答

0

您可以使用System.Web.Script.Serialization.JavaScriptSerializer。例如:

public class Product{ 
    public string Name { get; set; } 
    public string ID { get; set; } 
} 

我会加入一些实例来解释:

Product p1 = new Product {Name="Product1",ID="1"}; 
Product p2 = new Product {Name="Product2",ID="2"}; 
List<Product> pList = new List<Product>() {p1,p2}; 

然后我将它序列:

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
string sJSON = serializer.Serialize(pList); 
2
  1. 创建描述您的JSON
  2. 使用AutoMapper从您的类映射到JSON相关类的类。
+0

这就是我想摆脱的。 json对象结构在API中非常不一致,我需要为每个调用创建JSON相关的类,然后类才会用于映射函数。 – Jack 2012-08-03 00:09:53

+0

你需要把这个映射放在某个地方。您可以使用序列化器转换器(http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx),但在我看来它可能不太可读。如果你不得不相互映射的结构,你无法摆脱实现映射的地方。 – 2012-08-03 09:07:21