ジェネリック型のジェネリック リストであるプロパティを含む .NET クラスを JSON にシリアル化しようとしています。
私のジェネリック型は次のように定義されています。
public interface IFoo {}
public class Foo<T>: IFoo
{
public string Name {get; set;}
public string ValueType {get; set;}
public T Value {get; set:}
public Foo(string name, T value)
{
Name = name;
Value = value;
ValueType = typeof(T).ToString();
}
}
次に、次のようにします。
public class Fum
{
public string FumName {get; set;}
public list<IFoo> Foos {get; set;}
}
次のようにインスタンスを作成します。
myFum = new Fum();
myFum.FumName = "myFum";
myFum.Foos.Add(new Foo<int>("intFoo", 2);
myFum.Foos.Add(new Foo<bool>("boolFoo", true);
myFum.Foos.Add(new Foo<string>("stringFoo", "I'm a string");
それから...
次のように、NewtonSoft JSON ライブラリを使用してシリアル化しようとしています。
string strJson = JsonConvert.SerializeObject(data,
Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Include,
TypeNameHandling = TypeNameHandling.All,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
});
結果の JSON 文字列では、各 Foo インスタンスの Name プロパティと ValueType プロパティが正しくシリアル化されていますが、Value は常に出力から省略されています。
{
"FumName": "myFum",
"Foos" : [
{
"Name": "intFoo",
"ValueType": "System.Int32"
},
{
"Name": "boolFoo",
"ValueType": "System.Boolean"
},
{
"Name": "stringFoo",
"ValueType": "System.String"
}
]
}
Value プロパティが含まれるように、ジェネリック型インスタンスのリストを正しくシリアル化できるアプローチを誰かが提案できますか?