反序列化坏json

时间:2015-07-09 12:42:04

标签: c# json servicestack deserialization

我有来自第三方应用程序的json响应,如下所示:

{
    1: {
        number: 1,
        headline: Nyttigt,
        value: 9,
        type: value
    },
    2: {
        number: 4,
        headline: ,
        value: 0,
        type: order
    },
    3: {
        number: 5,
        headline: Generellt-Sortiment/utbud,
        value: 9,
        type: value
    },
    4: {
        number: 5,
        headline: Generellt-Leveranser,
        value: 9,
        type: value
    },
    5: {
        number: 5,
        headline: ,
        value: 0,
        type: order
    }
}

我正在尝试使用 ServiceStack JsonObject.Parse(jsonResult);

对其进行反序列化

问题在于json被切断了:

enter image description here

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Json字符串应该用双引号括起来,例如:

{
"1": {
    "number": 1,
    "headline": "Nyttigt",
    "value": 9,
    "type": "value"
},
"2": {
    "number": 4,
    "headline": "",
    "value":0,
    "type": "order"
}}

你是如何建立回应的?

答案 1 :(得分:1)

您拥有的数据不是JSON,但没有空格,它有效JSV format。 ServiceStack.Text支持序列化和反序列化JSV。

所以给出了数据:

  

{1:{数:1,标题:Nyttigt,值:9,类型:值},2:{数:4,标题:,值:0,类型:顺序},3:{数:5,标题:Generellt-Sortiment / utbud,值:9,类型:值},4:{数:5,标题:Generellt-Leveranser,值:9,类型:值},5:{数:5,标题:,值:0,类型:为了}}

和DTO:

public class Item
{
    public int Number { get; set; }
    public string Headline { get; set; }
    public int Value { get; set; }
    public ItemType Type { get; set; }
}

public enum ItemType
{
    value,
    order
}

您可以对其进行反序列化:

var data = "{1:{number:1 ....";
var items = data.FromJsv<Dictionary<int,Item>> ();

因此,您可以使用请求过滤器将JSV中的请求反序列化到您的DTO中。