【发布时间】:2021-03-14 10:42:39
【问题描述】:
所以我有很多数据只需要存储而不是配置,所以我决定将其作为 Json 存储在我的数据库中。
List<fooData[]> foo = new List<fooData[]>();
List<faaData[]> faa = new List<faaData[]>();
foreach(Choice c in choices)
{
foo.Add(getFooData(c)) // Returns IEnumerable<fooData>
faa.Add(getFaaData(c)) // Returns IEnumerable<faaData>
}
var JsonThis = MyJsonObject
{
fooArray = foo.ToArray(),
faaArray = faa.ToArray()
};
string JsonString = JsonConvert.SerializeObject(JsonThis, Formatting.Indented,
new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
很好,按预期工作。当我再次反序列化我的 Json 时,就会出现我的问题,无论是从数据库中获取还是在下一行执行,我都会在 fooData 和 faaData 的属性上抛出 NullReferenceException。
代码如下:
MyJsonObject obj = JsonConvert.DeserializeObject<MyJsonObject>(JsonString,
new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
JsonObject
[JsonObject(IsReference = true)]
public class MyJsonObject
{
public fooData[][] foo { get; set; }
public faaData[][] faa { get; set; }
}
faaData 和 fooData 99% 相同
[JsonObject(IsReference = true)]
public class faaData
{
public string faaString1 { get; set; }
public string faaString2 { get; set; }
public string faaString3 { get; set; }
}
序列化 JsonString 示例:
{
"Foo": [
[
{
"FooString1": "foo string 1",
"FooString2": "foo string 2",
"FooString3": "foo string 3"
},
{
"FooString1": "foo string 4",
"FooString2": "foo string 5",
"FooString3": "foo string 6"
}
],
[
{
"FooString1": "foo string 1",
"FooString2": "foo string 2",
"FooString3": "foo string 3"
},
{
"FooString1": "foo string 4",
"FooString2": "foo string 5",
"FooString3": "foo string 6"
}
]
],
"Faa": [
[
{
"FaaString1": "faa string 1",
"FaaString2": "faa string 2",
"FaaString3": "faa string 3"
},
{
"FaaString1": "faa string 4",
"FaaString2": "faa string 5",
"FaaString3": "faa string 6"
}
],
[
{
"FaaString1": "faa string 1",
"FaaString2": "faa string 2",
"FaaString3": "faa string 3"
},
{
"FaaString1": "faa string 4",
"FaaString2": "faa string 5",
"FaaString3": "faa string 6"
}
]
]
}
我的问题:是否不可能用对象数组的数组序列化 MyJsonObject 并将其返回到最初的相同对象中?还是我做错了什么?
【问题讨论】:
-
您应该更正您的代码,使其至少能够编译。
-
你能构建一个最小的可重现示例,包括 (1)
MyJsonObject的最小定义,(2) literal JSON 字符串和 (3) 对 @ 的调用987654327@ 失败了?
标签: c# json .net asp.net-mvc json.net