3

JSON.Netを使用してJSONを逆シリアル化しようとすると、JSON配列に無効な値が表示されます。

私は単純なJSONを持っています:

[
{
    "PhaseName": "Start",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "In Progress",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "Finish",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
}

]

そして私のコードの特派員クラス:

public class Advices
{
    public string PhaseName { get; set; }
    public List<string> AdvicesList { get; set; }
}

そして、Advicesオブジェクトの配列を表す検証可能ファイル:

public class MyAdvices
{
    private Advices[] MyAdvicesArrays;
....

したがって、JSONを次のように逆シリアル化しようとすると、次のようになります。

MyAdvicesArrays= JsonConvert.DeserializeObject<Advices[]>(sMyJSON));

JSON.Netは、MyAdvicesArrays配列の各オブジェクトの「フェーズ名」プロパティに正しい値を入力しますが、各オブジェクトのアドバイス配列は無効です。実行時にチェックすると、「式を評価できませんでした」。理解できません。私が間違ったことは何ですか?

4

3 に答える 3

1

jsonエンティティによると、あなたは無効です。

タイプをに変更AdvicesListAdvicesます。

public List<string> AdvicesList { get; set; }

に変更します

public List<string> Advices { get; set; }
于 2012-11-02T04:24:37.677 に答える
0

いいえ、あなたはクラスと同じようにJSONが正しくありません。

まず、JSONを次のように変更します。

{
    phases:[
        {
            "PhaseName": "Start",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "In Progress",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "Finish",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        }
    ]
}

JSONオブジェクトを正しく宣言していないことに注意してください。また、配列のプロパティも必要です。

次に、2つのクラスが必要になります。

public class AnythinYouWant{
    public List<Phase> Phases{get;set;}
}

public class Phase{
    public string PhaseName{get;set;}
    public List<string> Advices{get;set;}
}

最上位のJSONオブジェクトの最初のクラスがどのようになっているかに注目してください。名前は好きなようにすることができます。ただし、すべてのプロパティは名前と一致する必要があります。

于 2012-11-02T04:34:10.680 に答える
0

これを機能させるために私がしたことは、Advicesクラスの定義を変更することだけでした。

public class Advice
{
    public string PhaseName { get; set; }
    public List<string> Advices { get; set; }
}

クラス名をjustに、プロパティをに変更しAdviceましAdvicesListAdvices

于 2012-11-02T04:38:59.043 に答える