РЕДАКТИРОВАТЬ: моя попытка создать простой образец был неудачным.Я думал, что повторил проблему с моим реальным кодом, но на самом деле это было просто значение, не установленное для 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;
}
}
}