【发布时间】:2014-11-11 20:18:02
【问题描述】:
我有一些内部属性的类,我也想将它们序列化为 json。我怎样才能做到这一点? 例如
public class Foo
{
internal int num1 { get; set; }
internal double num2 { get; set; }
public string Description { get; set; }
public override string ToString()
{
if (!string.IsNullOrEmpty(Description))
return Description;
return base.ToString();
}
}
使用保存它
Foo f = new Foo();
f.Description = "Foo Example";
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
string jsonOutput = JsonConvert.SerializeObject(f, Formatting.Indented, settings);
using (StreamWriter sw = new StreamWriter("json_file.json"))
{
sw.WriteLine(jsonOutput);
}
我明白了
{
"$type": "SideSlopeTest.Foo, SideSlopeTest",
"Description": "Foo Example"
}
【问题讨论】:
-
通常内部属性不打算离开当前程序集的边界并因此被序列化。为什么你需要这样做?如果您想要一个正确的 JSON 表示,您可能需要一个 DTO 来将您的内部/私有内容映射到然后序列化。
-
+1 @DarinDimitrov 所说的。但如果你真的想这样做,我相信你需要继承
DefaultContractResolver以使其也可以查看非公共属性。 -
只需用
[JsonProperty()]属性标记它们。 -
如果类也是内部的,用
[JsonObject()]标记它