2

一部のオブジェクトがコントローラーで正しい値を持っているため(jsonをasp.net mvc 4コントローラーに送信)、jsonが不完全に逆シリアル化されることをタイトルで述べましたが、問題は配列に格納されたオブジェクトのプロパティで発生します(正確には、問題はデータで発生します)

私は次のクラスを持っています:

public class Node
{
    [JsonProperty("id")]
    public int? Id { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("type")]
    public string Type { get; set; }


    private Data _data = new Data();

    [JsonProperty("data")]
    public Data Data { get; set; }

    private List<Adjacency> _adjacencies = new List<Adjacency>();
    [JsonProperty("adjacencies")]
    public List<Adjacency> Adjacencies
    {
        get { return _adjacencies; }
        set { _adjacencies = value; }
    }


    private List<Instance> _dependendStates = new List<Instance>();

    public List<Instance> DependentStates
    {

        get { return _dependendStates; }
        set { _dependendStates = value; }
    }
}

public class Data
{
    [JsonProperty("$posX")]
    public decimal PosX { get; set; }
    [JsonProperty("$posY")]
    public decimal PosY { get; set; }
}

public class Adjacency
{
    [JsonProperty(PropertyName = "nodeTo")]
    public string NodeTo { get; set; }
    [JsonProperty(PropertyName = "data")]
    public AdjData Data { get; set; }
    //doesn't contain definition for automated transitions
}

public class AdjData
{
    [JsonProperty(PropertyName = "$labelid")]
    public string LabelId { get; set; }
    [JsonProperty(PropertyName = "$labeltext")]
    public string Label { get; set; }
    [JsonProperty(PropertyName = "$type")]
    public string Type { get; set; }    
}

適切な値を持たないフィールドを強調表示しました。

ヌルの問題http://img19.imageshack.us/img19/530/36976913.png

jsonは次のようになります。

{
   "result":[
      {
         "id":"100",
         "name":"Start",
         "data":{
            "$posX":-100,
            "$posY":-100,
            "$deployed":true,
            "$color":"#000000",
            "$selected":"true"
         },
         "adjacencies":[
            {
               "nodeTo":"188",
               "data":{
                  "$type":"labeled_arrow",
                  "$labelid":"Label Name",
                  "$labeltext":"Label Name"
               }
            }
         ]
      },
      {
         "id":"188",
         "name":"Second  ",
         "data":{
            "$dim":20,
            "$color":"#000000",
            "$selected":"true"
         },
         "adjacencies":[

         ]
      }
   ],
   "smName":"gftrds"
}

問題がどこにあるのかわからない、またはわからないため、これを整理するのに問題があります。

4

2 に答える 2

1

同じ問題が発生しましたが、私の場合、これはクライアント側からのデータの送信方法に関連していました。AJAX 要求が適切なヘッダーとフォーマットを使用していることを確認してください。例えば:

        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        data: JSON.stringify({
            MemberId : '123',
            UserName: '456',
            Parameters: [
                { Value : 'testing' },
                { Value : 'test2' }
            ]
        }),
于 2013-10-03T14:37:55.200 に答える
1

免責事項:私の場合のように、これを正確に再現できLabelず、問題なくLabelIdデシリアライズできませんでした。Type

私の場合、"$type":"labeled_arrow"プロパティが最初のものではない場合にのみ、プロパティを逆シリアル化できました-後で表示された場合、"$labelid":"Label Name"または正常に機能した場合"$labeltext":"Label Name"

奇妙なことに、$typeプロパティがtypeJson で呼び出され[JsonProperty(PropertyName = "type")]、C# で参照された場合、順序に関係なく、正常に逆シリアル化されます。

あなたの場合、逆シリアル化もそのどちらもできないLabelためLabelId、問題が他の何かによって引き起こされている可能性があります。私が提案したことを除外するには、いくつかのプロパティ名を変更して (おそらく $ を削除するだけ)、プロパティが正しく逆シリアル化されていないかどうかを確認してください。

于 2012-10-31T04:55:43.437 に答える