是否有方法从Windows8.1Store应用程序的多个模型创建json数组字符串?例如:
public class Foo
{
public string property1 {get;set;}
public string property2 {get;set;}
}
public class Foo2
{
public string value1 {get;set;}
public string value2 {get;set;}
}我有好几个模特。我使用json.net将模型转换为json字符串。我还可以转换模型数组。我的问题是如何使用以下模型创建数组json字符串:
[
{
"property1":"string",
"property2":"string"
},
{
"value1":"string",
"value2":"string"
},
{
"property1":"string",
"property2":"string"
}
]我真的被困住了需要你的帮助。
发布于 2014-11-03 11:06:37
这样做的一种方法是创建抽象类BaseFoo,Foo类和Foo2类都将继承这些类:
public abstract class BaseFoo
{
}
public class Foo : BaseFoo
{
public string property1 { get; set; }
public string property2 { get; set; }
}
public class Foo2 : BaseFoo
{
public string value1 { get; set; }
public string value2 { get; set; }
}让我们假设您按照如下方式初始化列表:
var list = new List<BaseFoo>
{
new Foo
{
property1 = "prop11",
property2 = "prop12"
},
new Foo2
{
value1 = "val1",
value2 = "val2"
},
new Foo
{
property1 = "prop21",
property2 = "prop22"
}
};序列化应该如下所示:
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
};
var json = JsonConvert.SerializeObject(list, Formatting.Indented, settings);生成的json将如下所示:
[
{
"$type": "ConsoleApplication23.Foo, ConsoleApplication23",
"property1": "prop11",
"property2": "prop12"
},
{
"$type": "ConsoleApplication23.Foo2, ConsoleApplication23",
"value1": "val1",
"value2": "val2"
},
{
"$type": "ConsoleApplication23.Foo, ConsoleApplication23",
"property1": "prop21",
"property2": "prop22"
}
]为成功反序列化添加了TypeNameHandling.Objects选项:
var deserializedList = JsonConvert.DeserializeObject<List<BaseFoo>>(json, settings);如果不需要反序列化,则可以排除它并获得所需的确切json字符串。虽然保留它不应该破坏任何功能,但是会增加json字符串的大小。
https://stackoverflow.com/questions/26710415
复制相似问题