C# 将类序列化为对象

C# 将类序列化为对象,c#,json,serialization,C#,Json,Serialization,使用JSON.NET—我试图序列化一个对象的大规模集合,该集合可以包含任何其他对象,也可以包含任何数量的其他对象数组。在进行序列化和反序列化时,数据输入不正确/正在销毁。数小时的搜索后,无法解决 public class SubClass { public string theString; } public class MasterClass { public object theObj; } 示例代码: SubClass thesubclass = new SubCla

使用JSON.NET—我试图序列化一个对象的大规模集合,该集合可以包含任何其他对象,也可以包含任何数量的其他对象数组。在进行序列化和反序列化时,数据输入不正确/正在销毁。数小时的搜索后,无法解决

public class SubClass
{
    public string theString;
}

public class MasterClass
{
    public object theObj;
}

示例代码:

SubClass thesubclass = new SubClass(); thesubclass.theString = "TESTSTRING";
MasterClass theMaster = new MasterClass();
theMaster.theObj = thesubclass;

string jsonOut = JsonConvert.SerializeObject(theMaster, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All});
textBox1.Text = jsonOut;
//Out1: {"$type":"WindowsFormsApplication1.MasterClass, WindowsFormsApplication1","theObj":{"$type":"WindowsFormsApplication1.SubClass, WindowsFormsApplication1","theString":"TESTSTRING"}}

MasterClass testMaster = JsonConvert.DeserializeObject<MasterClass>(jsonOut);
string jsonOut2 = JsonConvert.SerializeObject(testMaster, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All});
textBox2.Text = jsonOut2;


//Out2: {"$type":"WindowsFormsApplication1.MasterClass, WindowsFormsApplication1","theObj":{"theString":"TESTSTRING"}}
SubClass thesubclass=newsubclass();thesubclass.theString=“TESTSTRING”;
MasterClass theMaster=新的MasterClass();
theMaster.theObj=子类;
字符串jsonOut=JsonConvert.SerializeObject(主,新JsonSerializerSettings{TypeNameHandling=TypeNameHandling.All});
textBox1.Text=jsonOut;
//Out1:{“$type”:“WindowsFormsApplication1.MasterClass,WindowsFormsApplication1”,“theObj”:{“$type”:“WindowsFormsApplication1.SubClass,WindowsFormsApplication1”,“theString”:“TESTSTRING”}
MasterClass testMaster=JsonConvert.DeserializeObject(jsonOut);
字符串jsonOut2=JsonConvert.SerializeObject(testMaster,新JsonSerializerSettings{TypeNameHandling=TypeNameHandling.All});
textBox2.Text=jsonOut2;
//Out2:{“$type”:“WindowsFormsApplication1.MasterClass,WindowsFormsApplication1”,“theObj”:{“theString”:“TESTSTRING”}


基本上,任何超过主对象的对象都会丢失其类型//Out2应该匹配//Out1,但它们永远不会匹配。帮助

反序列化时,您还需要设置
TypeNameHandling
设置:

MasterClass testMaster = JsonConvert.DeserializeObject<MasterClass>(jsonOut, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });
MasterClass testMaster=JsonConvert.DeserializeObject(jsonOut,新的JsonSerializerSettings{typenameholding=typenameholding.All});

哇,一直以来。。。非常感谢,这完美地解决了问题。跨越数百个随机对象的750mb JSON转储现在使所有对象都正确无误。当我有15名代表愿意帮忙时,我会投票的;)