C# 当对象与JSON不匹配时,如何在C中进行自定义JSON序列化和反序列化

C# 当对象与JSON不匹配时,如何在C中进行自定义JSON序列化和反序列化,c#,json,asp.net-core,json-deserialization,json-serialization,C#,Json,Asp.net Core,Json Deserialization,Json Serialization,我在asp.net应用程序的后端有一个类。这需要序列化为JSON并发送到前端。除了序列化之外,这没有问题。该类看起来像这样的类名,这些名称已更改: public class ClassA { // There are some properties here that need to be serialized normally public string Name { get; set; } // This array needs custom serialization p

我在asp.net应用程序的后端有一个类。这需要序列化为JSON并发送到前端。除了序列化之外,这没有问题。该类看起来像这样的类名,这些名称已更改:

public class ClassA
{
  // There are some properties here that need to be serialized normally
  public string Name { get; set; }

  // This array needs custom serialization
  public ClassB[] Objects { get; set; }
}
ClassB如下所示:

public class ClassB
{
  public EnumA SomeEnum { get; set; }
}

public enum EnumA{ A = 0, B = 1, C = 2 }
{"name":"someName","objects":[2,1,1,0]}
我需要将其序列化为以下内容:

public class ClassB
{
  public EnumA SomeEnum { get; set; }
}

public enum EnumA{ A = 0, B = 1, C = 2 }
{"name":"someName","objects":[2,1,1,0]}
在这里,对象数组应该用ClassB的someEnum属性的数字值填充

到目前为止,我已经在ClassA中添加了这个函数,但我觉得应该采用不同的方式:

public string ToJson()
        {
            string result = "{";
            result += "\"name\":\"" + Name + "\",";

            result += "\"objects\":[";
            for (int i = 0; i < Objects.Length; i++)
            {
                result += (int)Objects[i].SomeEnum;
                if (i < Objects.Length - 1)
                    result += ",";
            }
            result += "]}";

            return result;
        }
我该如何以一种更好的方式来处理这件事呢?我还需要将生成的JSON反序列化回ClassA对象。非常感谢您的帮助。

您可以使用

首先,将JsonProperty属性添加到类中:

public class ClassA
{
  [JsonProperty("name")]
  public string Name { get; set; }

  [JsonProperty("objects")]
  public ClassB[] Objects { get; set; }
}
现在创建一个ClassBConverter:

然后做:

JsonConvert.(De)SerializeObject<ClassA>(yourJSONString, new ClassBConverter());

您是否在使用Newtonsoft或System.Text.Json?在本例中不是,而是在其他地方?看起来您没有使用任何框架来序列化或反序列化Json。如果您使用的是.NET Framework,我建议您使用Newtonsoft;如果您使用的是.NET Core,我建议您使用内置System.Text.Json。如果可能,我希望重写我创建的函数并使用System.Text.Json添加反序列化。谢谢。我将尝试此操作,并很快返回报告。我在WriteJson方法中编辑为intvalue.SomeEnum而不是intSomeEnum。这是正确的吗?序列化似乎有效!但反序列化时确实会出错:无法将类型为“System.Int64”的对象强制转换为类型为“System.Int32”。联机:inti=intreader.Value;它起作用了!谢谢。我会编辑你的答案并接受它。