1

オブジェクトのリストを含むクラスをシリアル化しようとしましたが、適切な値で文字列を作成する代わりに、メソッドJsonConvert.SerializeObject()はリスト内のすべての値がnullであるJSON文字列を返します。

オブジェクトから文字列を作成する必要がある行は次のとおりです。

string json = JsonConvert.SerializeObject(msg);

ここで、msgはクラスです。

public class JSONPlayerListResponse
{
    public List<Player> Players {get; set;}

    public MessageType Action
    {
        get { return MessageType.GetPlayerListResponse; }
    }

    public string CommID { get; set; }

    public string PlayerID { get; set; }
}

とプレーヤーは

[DataContract]
public class Player
{
    [DataMember]
    public string UserName { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public string CurrencyCode { get; set; }
    [DataMember]
    public string CountryCode { get; set; }
    [DataMember]
    public string FName { get; set; }
    [DataMember]
    public string LName { get; set; }

    public decimal Ballance { get; set; }

    public System.Collections.Concurrent.ConcurrentQueue<Bet> BetsHistory { get; set; }

    public string ID { get; set; }

    public string Name { get; set; }

}

msgインスタンスのプレーヤーのリストには1つの要素が含まれ、その値FNameはPlayer1に設定されていますが、返される文字列は次のとおりです。

{\"Players\":[{\"UserName\":null,\"Password\":null,\"CurrencyCode\":null,\"CountryCode\":null,\"FName\":null,\"LName\":null}],\"Action\":18,\"CommID\":null,\"PlayerID\":\"27de1\"}

返された文字列のすべての値がnullである理由と、実際の値を含む文字列を生成するためにロジックを変更する方法を知っている人はいますか?

4

1 に答える 1

1

Players実際の値で初期化していないようです。Players.Add(new Player())十分ではありません。

これを試して。

var result = JsonConvert.SerializeObject(
        new JSONPlayerListResponse() { 
            Players = new List<Player>() { new Player(){UserName="test name"} } 
        }
    );

UserName が null ではないことがわかります。

于 2012-06-06T11:42:05.283 に答える