C# 序列化数据';不显价值

C# 序列化数据';不显价值,c#,serialization,C#,Serialization,编辑:我尝试创建一个简单的示例失败。我以为我已经用我的真实代码复制了这个问题,但它实际上只是一个没有设置为public的值,所以我的序列化失败了 原职: 我有一个类,其中有一个要设置的值(下面的a)。另一个类中有一个a和一个a值的设置器(下面的B)。我有一个列表中的一组B和一系列foreach和强制转换。在其内部,我调用setter,但所有这些的结果是一个列表,其中setter似乎从未被调用过。这里出了什么问题?如何获取新值 我能够在一组更简单的代码中重现这个问题 这是一把小提琴: 或者,下面是

编辑:我尝试创建一个简单的示例失败。我以为我已经用我的真实代码复制了这个问题,但它实际上只是一个没有设置为public的值,所以我的序列化失败了

原职:

我有一个类,其中有一个要设置的值(下面的a)。另一个类中有一个a和一个a值的设置器(下面的B)。我有一个列表中的一组B和一系列foreach和强制转换。在其内部,我调用setter,但所有这些的结果是一个列表,其中setter似乎从未被调用过。这里出了什么问题?如何获取新值

我能够在一组更简单的代码中重现这个问题

这是一把小提琴:

或者,下面是代码:

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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用Newtonsoft.Json;
命名空间控制台应用程序28
{
甲级
{
公共字符串值=null;
}
B类
{
私有A=新A();
公共void SetAValue(字符串s)
{
WriteLine($”值设置为:{s});
a、 值=s;
}
}
公共课程
{
公共静态void Main(字符串[]args)
{
对象列表=新列表{new B(),new B()};
if(列表为IEnumerable可枚举)
{
foreach(可枚举中的var值)
{
如果(值为B a)
{
a、 SetAValue(“blooop”);
}
}
}
Console.WriteLine(Serialization.serializationjson(list));
}
}
//你可以忽略这一点。这只是为了更容易地显示对象结果
类序列化
{
私有静态JsonSerializer\u序列化程序;
静态序列化()
{
_serializer=新的JsonSerializer();
}
公共静态字符串序列化JSON(T值)
{
字符串jsonString;
使用(var stringWriter=new stringWriter())
使用(var writer=newjsontextwriter(stringWriter))
{
_serializer.Serialize(writer,value);
jsonString=stringWriter.ToString();
}
返回jsonString;
}
}
}
在班级
B
public A A{get;set;}=new A()
为了序列化,变量必须是公共的


抱歉,澄清一下,setter中的print语句已显示,因此我知道它正在进入其中。我不理解这个问题。啊,该死。。。好吧,这是可行的,但这确实意味着我没能用一种简单的方式复制真正的问题。回到坏代码。。。这是漫长的一天。。。