2012-11-13 44 views
4

我有一個使用ServicStack的REST服務構建,並且在一次調用中用戶可以發送不同類型的值。所以我使用C#類型對象創建了屬性。servicestack.text將數組反序列化爲對象

所發送的JSON看起來像這樣:

{"name":"ffff","params":[{"pId":1,"value":[624,625]},{"pId":2,"value":"xxx"}]} 

的部分「值」:[624625]導致填充有字符串對象「[624625]」。我希望得到一個int數組或至少一個字符串數組,但它是純字符串。 我設置JsConfig.TryToParsePrimitiveTypeValues = true,但這似乎沒有任何效果。

我試過github的最新消息。

這可以用任何開關組合來完成,或者我必須自己解析嗎?

感謝

編輯:

下面是一些testcode:

[TestMethod] 
public void JsonTest() 
{ 
    string json = "{\"name\":\"ffff\",\"params\":[{\"pId\":1,\"value\":[624,625]},{\"pId\":2,\"value\":\"xxx\"}]}"; 

    var x = JsonSerializer.DeserializeFromString<xy>(json); 
    Assert.AreEqual(x.Params[0].Value.GetType(), typeof(int[])); 
} 

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

    public List<Param> Params { get; set; } 
} 

public class Param 
{ 
    public int PId { get; set; } 

    public object Value { get; set; } 
} 
+0

你用什麼代碼來反序列化這個JSON? – Cocowalla

回答

1

如果更改的 「價值」 的類型爲int數組如下,然後ServiceStack將序列化的int數組。

public class Param 
    { 
     public int PId { get; set; } 

     public int[] Value { get; set; } 
    } 

以下單元測試通過:

[TestMethod] 
    public void JsonTest() 
    { 
     string json = "{\"name\":\"ffff\",\"params\":[{\"pId\":1,\"value\":[624,625]},{\"pId\":2,\"value\":\"xxx\"}]}"; 

     var x = JsonSerializer.DeserializeFromString<xy>(json); 
     Assert.AreEqual(x.Params[0].Value.GetType(), typeof(int[])); 
     // Show that we have some integers 
     Assert.IsTrue(x.Params[0].Value.Count()>0); 
    } 

如果不能改變值的類型以任何理由,則可以使用ServiceStack.Text根據需要將字符串序列化到一個數組。