首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多模型到json

多模型到json
EN

Stack Overflow用户
提问于 2014-11-03 08:31:10
回答 1查看 475关注 0票数 0

是否有方法从Windows8.1Store应用程序的多个模型创建json数组字符串?例如:

代码语言:javascript
复制
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字符串:

代码语言:javascript
复制
[
    {
        "property1":"string",
        "property2":"string"
    },
    {
        "value1":"string",
        "value2":"string"
    },
    {
        "property1":"string",
        "property2":"string"
    }
]

我真的被困住了需要你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 11:06:37

这样做的一种方法是创建抽象类BaseFooFoo类和Foo2类都将继承这些类:

代码语言:javascript
复制
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; }
}

让我们假设您按照如下方式初始化列表:

代码语言:javascript
复制
 var list = new List<BaseFoo>
     {
         new Foo
         {
             property1 = "prop11",
             property2 = "prop12"
         },
         new Foo2
         {
             value1 = "val1",
             value2 = "val2"
         },
         new Foo
         {
             property1 = "prop21",
             property2 = "prop22"
         }
     };

序列化应该如下所示:

代码语言:javascript
复制
var settings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.Objects
    };

    var json = JsonConvert.SerializeObject(list, Formatting.Indented, settings);

生成的json将如下所示:

代码语言:javascript
复制
[
    {
        "$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选项:

代码语言:javascript
复制
var deserializedList = JsonConvert.DeserializeObject<List<BaseFoo>>(json, settings);

如果不需要反序列化,则可以排除它并获得所需的确切json字符串。虽然保留它不应该破坏任何功能,但是会增加json字符串的大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26710415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档