使用Newtownsoft,我如何序列化没有其属性名称的对象?

时间:2018-08-31 12:57:47

标签: c# json

我正在向客户发送json中一百万个FOO的列表。

public class FOO
{
    public string Foo, Name, Call, Loc, ID;
    public double Long, Lat;
    public string[] Adr, OpenningHours;
}           

但是客户要求我提供特定的输出,因为这会减小数据大小:

  

删除属性名称,加入地址,以及列出他们的住所,这将始终是每周7天。喜欢:

[
    [
       "ag",
       99.0000000,
       9.0000000,
       "FOO-FOO BAR",
       "ADR1|ADR2|ADR3|ADR4",
       "0101",
       "07:30-12:00,12:00-19:30",
       "07:30-12:00,12:00-19:30",
       "07:30-12:00,12:00-19:30",
       "07:30-12:00,12:00-19:30",
       "07:30-12:00,12:00-19:30",
       "07:30-13:00,",
       ",",
       "07H30",
       "FOO BAR"
    ],
]

我对Address联接或平坦的OpenningHours没问题。使用:

public class ItemMapper
{
    public string Foo, Name, Adr, ID, Call, Loc,
        w1, w2, w3, w4, w5, w6, w7;
    public double Long, Lat;
}

return  
    new ItemMapper
    {
        Foo = this.Foo,
        // [...]
        Adr = string.Join("|", this.Adr),
        w1 = this.OpenningHours[0],
        // [...]
        w7= this.OpenningHours[6]
    }; 

在没有纯字符串操作的情况下,是否有适当的方法来实现替换等?

列表的序列化会产生不好的结果,我用编译后的正则表达式remplace进行了修复:

[
    { <-- Not a []
       "PopertyName":"PropertyValue", <-- Poperty Name, and :
       // ..
       "PopertyName":"PropertyValue",
    },
]

1 个答案:

答案 0 :(得分:1)

我不建议使用它,因为它为您提供了动态JSON(即您无法使用它来制作类),但是您可以使用List<List<string>>来解决该要求。

给出List<ItemMapper> data,使用:

var result = data
    .Select(item => new List<string>
    {
        x.Foo,
        x.Name,
        x.Call,
        ... // not sure about the order though
    })
    .ToList();