2

使用JsonConvert.SerializeObject时如何仅获取值?我不需要重复的单词,如 id、name 等......

示例:{ id: 189, name:'Paul', age:31, } x { [189, 'Paul', 31] }

谢谢!

我需要与 PageList 类一起使用

public class PageList {
    IEnumerable _rows;
    int _total;
    int _page;
    int _records;
    object _userData;

    public PageList(IEnumerable rows, int page, int total, int records, object userData) {
        _rows = rows;
        _page = page;
        _total = total;
        _records = records;
        _userData = userData;
    }

    public PageList(IEnumerable rows, int page, int total, int records)
        : this(rows, page, total, records, null) {

    }

    public int total { get { return _total; } }

    public int page { get { return _page; } }

    public int records { get { return _records; } }

    public IEnumerable rows { get { return _rows; } }

    [JsonIgnore]
    public object userData { get { return _userData; } }

    public override string ToString() {
        return Newtonsoft.Json.JsonConvert.SerializeObject(this, new IsoDateTimeConverter() { DateTimeFormat = "dd-MM-yyyy hh:mm:ss" });
    }
}
4

2 回答 2

2

我能想到的最接近的事情是

var yourObjectList = List<YourObject>(){.....}

string s = JsonConvert.SerializeObject(GetObjectArray(yourObjectList));

public static IEnumerable<object> GetObjectArray<T>(IEnumerable<T> obj)
{
    return obj.Select(o => o.GetType().GetProperties().Select(p => p.GetValue(o, null)));
}
于 2012-05-10T21:40:38.050 回答
1

第二个不是有效的 JSON ( { 189, 'Paul', 31 })。也许您想要一个数组而不是 ( [ 189, 'Paul', 31 ]),在这种情况下,您可以不直接使用序列化程序,而是先将对象加载到 aJObject中,然后只取其值。

public class Foo
{
    public int id;
    public string name;
    public int age;
}

public class Test
{
    public static void Main()
    {
        Foo foo = new Foo { id = 189, name = "Paul", age = 31 };
        JObject jo = JObject.FromObject(foo);
        JArray ja = new JArray();
        foreach (var value in jo.Values())
        {
            ja.Add(value);
        }

        Console.WriteLine(ja);
    }
}

或者如果你真的想要非 JSON 格式,你也可以使用JObject枚举并自己打印值。

于 2012-05-10T20:36:02.023 回答