2

だから私は、次のようなサードパーティのAPIによって返されたJSONを解析しようとしています:

{
    "status":"ok",
    "links":
    [
        {
            "link":
            {
                "link_name":"Sample",
                "link_id":"9999"
            }
        },

    ],//and so on with other nested properties

JSONをマップするクラスを作成しました

    [DataContract]
    public class JsonTestResults
    {
        [DataMember]
        public string status { get; set; }
        [DataMember]
        public IEnumerable<Link> links { get; set; }
    }
    [DataContract]
    public class Link
    {
        [DataMember]
        public string link_name { get; set; }
        [DataMember]
        public string link_id { get; set; }
    }

そして、このデシリアライザーを介して応答をプッシュしています (この投稿から取得)

public  T Deserialise<T>( string json )
        {
            T obj = Activator.CreateInstance<T>( );
            using (MemoryStream ms = new MemoryStream( Encoding.Unicode.GetBytes( json ) ))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer( obj.GetType( ) );
                obj = (T)serializer.ReadObject( ms ); 
                return obj;
            }
        }

ただし、デシリアライズした結果、Link[] の内容が null として表示されます。(返されるそれぞれに Link オブジェクトがありますが、link_name と link_id は null です。)

thisthisthisthisthisをチェックアウトしましたが、この問題を解決できませんでした。サードパーティのライブラリを必要としないソリューションを探しています。(私の主任開発者による)。

JSON に一致するクラスに問題があるとは思いませんが、レビューしたい人がいる場合は、完全なコードを投稿できます。

4

2 に答える 2

3

正しく逆シリアル化するには、もう 1 つのクラスが必要です

public class JsonTestResults
{
    public string status { get; set; }
    public IEnumerable<TempLink> links { get; set; }
}

public class TempLink
{
    public Link link;
}

public class Link
{
    public string link_name { get; set; }
    public string link_id { get; set; }
}

Json.Netでテストして動作しました。

var obj = JsonConvert.DeserializeObject <JsonTestResults>(json);

JavaScriptSerializerも動作します

var obj2 = new JavaScriptSerializer().Deserialize<JsonTestResults>(json);
于 2012-09-06T16:46:50.617 に答える
-1

JSON の構文エラーです。

JSON 配列では、最後の要素の後に「,」がありません。

 {
"status":"ok",
"links":
[
    {
        "link":
        {
            "link_name":"Sample",
            "link_id":"9999"
        }
    }
],

これはうまくいきます!!

于 2012-09-06T16:37:17.147 に答える