我正在使用JSON.Net库。我有一些看起来像这样的JSON:
"Templates": [
{
"Name": "Default Fields 1",
"Fields": [16, 10, 0, 4, 5, 11, 12, 7, 15, 17, 9, 25, 3],
"Formats": [
"string", "datetime", "LeftZeroPaddedString13", "2dp", "2dp", "2dp", "2dp", "int", "int",
"string", "int", "int", "int", "int"
]
},
{
"Name": "Default Fields 2",
"Fields": [3, 25, 9, 17, 15, 7, 12, 11, 5, 4, 0, 10, 16],
"Formats": [
"int", "int", "int", "int", "string", "int", "int", "2dp", "2dp", "2dp", "2dp", "LeftZeroPaddedString13",
"datetime", "string"
]
}]
我将它反序列化为以下类中的Templates
属性:
public class Options
{
public List<FieldTemplate> Templates { get; set; }
}
public class FieldTemplate
{
public string Name { get; set; }
public List<int> Fields { get; set; }
public List<string> Formats { get; set; }
}
这样可以正常工作,但在某些情况下(并非总是如此)我想阻止在我再次序列化对象时包含Fields
和Formats
属性(尽管我想保留{序列化输出中的{1}}属性。我已经考虑过在Name
中使用ShouldSerializeFields()
和ShouldSerializeFormats()
,然后循环遍历该对象以设置一个布尔属性,这些属性可以读取每个方法,但它看起来并不优雅。有没有更好的办法?例如,我可以在FieldTemplate
中设置布尔属性,Options
可以使用它。我不知道怎么做,或者即使它可能。
答案 0 :(得分:0)
最后,我使用了一个带有开关的静态类,用于我想要动态显示/隐藏的每个属性:
<!DOCTYPE html>
<html>
<head>
<title>Blah</title>
</head>
<body>
<div id="leftSide">
</div>
<script>
var number_of_faces = 0;
var theLeftSide = document.getElementById("leftSide");
function generate_faces() {
for (number_of_faces = 0; number_of_faces < 5; number_of_faces++) {
newFace = document.createElement("img");
newFace.setAttribute(
"src",
"http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png"
);
theLeftSide.appendChild(newFace);
}
}
generate_faces();
</script>
</body>
</html>
然后从其他地方我可以启用/禁用这些属性:
public class FieldTemplate_JSONSerialization_Switches
{
public static bool Fields = true;
public static bool Formats = true;
}
public class Options
{
public List<FieldTemplate> Templates { get; set; }
}
public class FieldTemplate
{
public string Name { get; set; }
public List<int> Fields { get; set; }
public List<string> Formats { get; set; }
// instructions to Json.NET
public bool ShouldSerializeFields()
{
return FieldTemplate_JSONSerialization_Switches.Fields;
}
public bool ShouldSerializeFormats()
{
return FieldTemplate_JSONSerialization_Switches.Formats;
}
}
答案 1 :(得分:-1)
以下是类似的问题和answer。
的Json.Net文档修改强> 要不迭代集合,请创建静态对象并在ShouldSerializeXYZ()中检查它的属性。