0

CLR クラスへの逆シリアル化で JSON.NET を使用します。JSON をクラスに逆シリアル化することですべて問題ありません。クラス コンストラクターで BitmapImage を作成し、クラス プロパティ Photo に設定します。問題はプロパティ BitmapImage Photo がまだ null で、Uri が適切です。

クラスコンストラクターなしでこのuriを使用してBitmapImageオブジェクトを作成しようとすると、機能します。

どこに問題がありますか?

コードはここにあります:

    [JsonObject]
    public class JsonUser
    {
        [JsonProperty("idUser")]
        public string IdUser { get; set; }
        [JsonProperty("nick")]
        public string Nick { get; set; }
        [JsonProperty("sefNick")]
        public string SefNick { get; set; }
        [JsonProperty("sex")]
        public string Sex { get; set; }
        [JsonProperty("photon")]
        public string Photon { get; set; }
        [JsonProperty("photos")]
        public string Photos { get; set; }
        [JsonProperty("logged")]
        public bool Logged { get; set; }
        [JsonProperty("idChat")]
        public int IdChat { get; set; }
        [JsonProperty("roomName")]
        public string RoomName { get; set; }
        [JsonProperty("updated")]
        public string Updated { get; set; }

        public BitmapImage Photo { get; set; }

        public JsonUser()
        {
        }

        public JsonUser(string idUser, string nick, string sefNick, string sex, string photon, 
            string photos, bool logged, int idChat, string roomName, string updated )
        {
            IdUser = idUser;
            Nick = nick;
            SefNick = sefNick;
            Sex = sex;
            Photon = photon;
            Photos = photos;
            Logged = logged;
            IdChat = idChat;
            RoomName = roomName;
            Updated = updated;

            var img = new BitmapImage();
            img.BeginInit();
            img.UriSource = new Uri(photon, UriKind.Absolute);
            img.EndInit();

            //it is still null
            Photo = img;
        }
    }


I use this object of type JsonUser in other class

public class MyClass
{
public JsonUser user;


public JsonUser CreateUser()
{
   //this method parse JSON string and return object type of JsonUser
}


//in this method I create instance on user
public void SomeMethod()
{
 user=CreateUser();
}

}



//and in other part of code i try this

var obj = new MyClass();
obj.SomeMethod();

//nad here is Photo null
obj.user.ProfilePhoto;

ここに問題があると思います。行にブレークポイントを設定した場合:

var users = JsonConvert.DeserializeObject>>(htmlStringResult.Replace(@"\",""));

プロパティ ProfilePhoto が null です。問題はこのメソッドにあるに違いないと思います。

public JsonUser CreateJsonUser(string nick)
{
    const string parameter = @"&nickOponent=";

try
{
    string htmlStringResult = HttpGetReq(new Uri(string.Format
                                     (CultureInfo.InvariantCulture, "{0}{1}{2}{3}",
                                      PokecUrl.DoplnData, Account.SessionId, parameter, nick)));

    var users = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, JsonUser>>>(htmlStringResult.Replace(@"\",""));
    return users["newNickInfo"].First().Value;

}
catch (Exception exception)
{

    throw exception;
}

}

解決策: 問題は、JSON.NET が次のコンストラクターを呼び出すことでした。

    public JsonUser()
    {
    }

プロパティPhotonのセッターで、別の場所でプロパティProfilePhotoを初期化します

4

2 に答える 2

0

あなたはこのようにそれを試しましたか?

Photo = new BitmapImage(); 
Photo = img;

それが機能しない場合は、imgをPhotoに置き換えることをお勧めします。

于 2010-11-15T10:07:39.307 に答える
0

Photo を img に設定する直前にブレークポイントを配置します。img が null でないことを確認します。この問題は、img の初期化ほどシリアライゼーションとは関係がない可能性があります

于 2010-11-15T10:32:36.163 に答える