@Got_Oxidus
Учусь

Управление десериализацией JSON?

Как управлять десериализацией?
Есть класс
[DataContract]
class A
{
  [DataMember]
  public Int32 P1 { get; private set; }
  [DataMember]
  public String P2 { get; private set; }
}

Json
{
  "serializable": true, // этого поля нет в классе
  "P1": 1,
  "P2": "ffda"
}


Как десериализовать объекты только с "serializable": true, а false ставить null или что-то другое делать (брать новый)?

Как десериализовать производные от А с дополнительными членами?

P.S, Каждый объект находиться в отдельном файле
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
@FreeBa
Как то так:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ConsoleApplication11
{
    class Test
    {
        public string P1 { get; set; }
        public int P2 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var str = JsonConvert.SerializeObject(new List<object> {
                new { s = true, P1 = "one", P2 = 12 },
                new { s = false, P1 = "two", P2 = 13 },
                new { s = true, P1 = "three", P2 = 14 } });

            dynamic dObject = JsonConvert.DeserializeObject(str);

            var list = new List<Test>();

            foreach (var item in dObject)
            {
                if (item.s == true)
                {
                    list.Add(item.ToObject<Test>());
                }
                else
                {
                    Console.WriteLine("No way");
                }
            }

            Console.ReadKey();
        }
    }
}


Хотя если вам требуется фильтровать до перевода в объектную модель, то это придется делать вручную.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@John_Nash
coder
1) написать свою реализацию десериализатора; или написать класс с одним полем serializable, получить по нему результат и дальше решать, что делать
2) также, как и базовый
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы