Проблема с созданием BitmaImage In в конструкторе JSON-объекта - PullRequest
0 голосов
/ 15 ноября 2010

Я использую JSON.NET для десериализации в класс CLR. Все в порядке с десериализацией JSON в класс, в конструкторе класса я пытаюсь сделать BitmapImage и установить для свойства класса Photo. Проблема в свойствах BitmapImage Фотография по-прежнему нулевая, Ури это хорошо.

Я пытаюсь использовать этот 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()
    {
    }

Инициализирую свойство ProfilePhoto на другое место, в сеттере в свойстве Photon

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Установите точку останова непосредственно перед тем, как установить Photo на img. Проверьте, что img не является нулевым. Эта проблема может не иметь ничего общего с сериализацией, так как инициализация img

0 голосов
/ 15 ноября 2010

Вы пробовали это так:

Photo = new BitmapImage(); 
Photo = img;

Если это не сработает, я бы предложил заменить img на Photo.

...