1

次の Json を逆シリアル化する必要があります。これは Jsonlint.com によれば有効ですが、以前にこれに遭遇したことがないか、同様の Json の例とその対処方法を見つけることができませんか?

[1,"Bellegrove  / Sherwood ","76705","486","Bexleyheath Ctr",1354565507000]

次のような私の現在のシステム:

データクラス:

[DataContract]
public class TFLCollection 
{ [DataMember(Name = "arrivals")]
    public IEnumerable<TFLB> TFLB { get; set; } 
}
[DataContract]

public class TFLB
{ 
    [DataMember]
    public string routeName { get; set; }
    [DataMember]    
    public string destination { get; set; }
    [DataMember]    
    public string estimatedWait { get; set; } 
}

デシリアライザー:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(TFLCollection));

                using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(result))) 
                {     var buses = (TFLCollection)serializer.ReadObject(stream);
                foreach (var bus in buses.TFLBuses)     
                    {
                        StopFeed _item = new StopFeed();

                         _item.Route = bus.routeName;
                          _item.Direction = bus.destination;
                          _item.Time = bus.estimatedWait;

                          listBox1.Items.Add(_item);

私の既存のデシリアライザーは完全な Json ストリームで動作し、それを反復処理しますが、新しい Json では逆シリアル化する必要があり、アイテムが 1 つしかないため、反復処理する必要はありません。

現在と同様の方法を使用して Json の例を逆シリアル化することは可能ですか?

4

1 に答える 1

2

あなたは物事を過度に複雑にしようとしていると言えます。あなたが持っているのは、完全に形成された文字列のjson配列です。私があなただったら、まずそれを .net 配列にデシリアライズしてから、値をコピーする「マッパー」関数を記述します。

public TFLB BusRouteMapper(string[] input)
{
    return new TFLB {
        Route = input[x],
        Direction = input[y],
    };
}

等々。もちろん、これはjsonがどのような順序になるかを知っていることを前提としていますが、最初にこれを試みる場合は、そうしなければなりません!

于 2012-12-03T20:57:07.833 に答える