1

アプリケーションでPipl.comAPIからのAPI呼び出しの応答の逆シリアル化を処理するために、Json.Netを使用しています。これは正常に機能しますが、奇妙な理由で、JSON文字列の特定のプロパティを逆シリアル化しません。 JsonConvert.DeserializeObjectメソッドにフィードします。

私のクラスはこれです:

public class Source
{
    public string Dsname { get; set; }
    public bool IsSponsored { get; set; }

    public string Url { get; set; }
    public string Domain { get; set; }

    public uint ExternalID { get; set; }

    public Source()
    {

    }
}

Dsname以外はすべて適切に逆シリアル化されます。変換されるJsonは次のようになります。

"source": {                    
    "@is_sponsored": false,
    "@ds_name": "Personal Web Space -MySpace",
    "url": "http://www.foo.bar"
    "domain": "myspace.com"
}

この問題を解決する方法はありますか?前もって感謝します。

4

2 に答える 2

1

ラッパークラスを追加し、次のようにプロパティ名を属性として指定しました。

public class Source
{
    [JsonProperty(PropertyName = "@ds_name")]
    public string Dsname { get; set; }

    [JsonProperty(PropertyName = "@is_sponsored")]
    public bool IsSponsored { get; set; }

    public string Url { get; set; }

    public string Domain { get; set; }

    public uint ExternalID { get; set; }
}

public class RootObject
{
    public Source source { get; set; }
}

それから私はうまく逆シリアル化することができました:

var json = "{\"source\": { \"@is_sponsored\": true, \"@ds_name\": \"Personal Web Space -MySpace\", \"url\": \"http://www.foo.bar\", \"domain\": \"myspace.com\"}}";

var des = JsonConvert.DeserializeObject<RootObject>(json);

次の点に注意して
ください。-サンプルを中括弧で囲んで有効なJSONにします
-欠落しているコンマを追加しました
-「@is_sponsored」の値をデフォルト値ではないように変更して、正しく脱シールされていることを確認します。

于 2012-06-12T14:19:16.497 に答える
1

わかりました、これはかなり古いスレッドです。しかし、私は以前に同様の問題に遭遇し、このスレッドに出くわしました。

私の場合、se / deserializeしようとしたクラスには、List<ClassName>パブリックプロパティが含まれていました。これは正常にシリアル化されましたが、逆シリアル化されません。に切り替えてClassName[]、逆シリアル化の問題を修正しました。

それがこのスレッドに出くわした他の誰かを助けるか、少なくとも彼らに探すべき何かを与えることを願っています。

于 2014-03-27T01:15:17.980 に答える