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を初期化します