Сериализация не показала ценность - PullRequest
0 голосов
/ 20 июня 2019

РЕДАКТИРОВАТЬ: моя попытка создать простой образец был неудачным.Я думал, что повторил проблему с моим реальным кодом, но на самом деле это было просто значение, не установленное для public, поэтому моя сериализация не удалась.

Исходное сообщение:

У меня есть класс сзначение, которое должно быть установлено (A ниже.) В другом классе есть A и установщик для значения A (B ниже.) У меня есть куча B в списке и ряд foreach и приведений.Внутри всего этого я вызываю сеттер, но результатом всего этого является список, в котором сеттер, кажется, никогда не вызывался.Что здесь не так и как мне получить новое значение?

Я смог воссоздать проблему в более простом наборе кода.

Вот скрипка: https://dotnetfiddle.net/B4YVHU

Кроме того, вот код:

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

namespace ConsoleApplication28
{
    class A
    {
        public string value = null;
    }

    class B
    {
        private A a = new A();

        public void SetAValue(string s)
        {
            Console.WriteLine($"Value is set to: {s}");
            a.value = s;
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            object list = new List<B> { new B(), new B() };

            if ( list is IEnumerable<object> enumerable)
            {
                foreach (var value in enumerable)
                {
                    if (value is B a)
                    {
                        a.SetAValue("blooop");
                    }
                }
            }

            Console.WriteLine(Serialization.SerializeJson(list));
        }
    }

    // You can ignore this. It's just to more easily display the object result
    class Serialization
    {
        private static JsonSerializer _serializer;

        static Serialization()
        {
            _serializer = new JsonSerializer();
        }

        public static string SerializeJson<T>( T value )
        {
            string jsonString;
            using ( var stringWriter = new StringWriter() )
            using ( var writer = new JsonTextWriter( stringWriter ) )
            {
                _serializer.Serialize(writer, value);
                jsonString = stringWriter.ToString();
            }
            return jsonString;
        }
    }
}

1 Ответ

1 голос
/ 20 июня 2019

в классе B: public A a {get; set;} = new A(); Для сериализации переменные должны быть открытыми.

https://dotnetfiddle.net/B4YVHU

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...