Я пытаюсь сериализовать объект моей области в строку json, но получаю Newtonsoft.Json.JsonSerializationException: «Ошибка получения значения из идентификатора в Goodbuy.Models.product». Вот метод, в котором происходит сериализация:

    async void OnItemSelected(product item)
    {
        if (item == null)
            return;

        var model = await ProductService.GetProduct(item.Id);
     
        //Convert Object to string 
        string jsonStrObj = await Task.Run(() => JsonConvert.SerializeObject(model));

        // This will push the ItemDetailPage onto the navigation stack
        
        await Shell.Current.GoToAsync($"{nameof(ItemDetailPage)}?ProductModel={jsonStrObj}");


    }

Ниже мой класс объекта области:

public class product :RealmObject
{
    [PrimaryKey]
    [MapTo("_id")]
    public ObjectId? Id { get; set; }
    [MapTo("brand")]
    public string Brand { get; set; }
   
    [MapTo("image_url")]
    public string ImageUrl { get; set; }
    [MapTo("name")]
    public string Name { get; set; }
   
    
}
-1
PHULUSO GOVERN RAMULIFHO 21 Фев 2021 в 22:29

1 ответ

Лучший ответ

Использование атрибута JsonObject с аргументом MemberSerialization.OptIn и создание настраиваемого конвертера, который просто выводит Guid-часть ObjectId Json.NET, как сериализовать ObjectId.

 [JsonObject(MemberSerialization.OptIn)]
public class product : RealmObject
{
    [PrimaryKey]
   
    [JsonProperty(PropertyName = "id")]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId? Id { get; set; }
  
    [JsonProperty(PropertyName = "brand")]
    public string Brand { get; set; }

   
    [JsonProperty(PropertyName = "image_url")]
    public string ImageUrl { get; set; }
    
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }


}

 [JsonObject(MemberSerialization.OptIn)]
public class product : RealmObject
{
    [PrimaryKey]
   
    [JsonProperty(PropertyName = "id")]
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId? Id { get; set; }
  
    [JsonProperty(PropertyName = "brand")]
    public string Brand { get; set; }

   
    [JsonProperty(PropertyName = "image_url")]
    public string ImageUrl { get; set; }
    
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }


}
1
Cherry Bu - MSFT 22 Фев 2021 в 06:02