2012-08-02 65 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