编辑:我创建一个简单样本的尝试失败。我以为我已经用真实的代码复制了这个问题,但是实际上这只是一个未设置为public的值,所以我的序列化失败了。
原始帖子:
我有一个要在其上设置值的类(下面的A。)另一个类中有一个A,并且有一个A值的设置器(下面是B)。我在列表和一系列数据中有一堆B foreach的演员表。在所有内容中,我都调用了setter,但是所有这些的结果是一个列表,其中似乎从未调用过setter。这里出了什么问题,我如何获得新的价值?
我能够用一组更简单的代码重现该问题。
这是一个小提琴: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;
}
}
}
答案 0 :(得分:1)