Newtonsoft将对象序列化为自定义输出

时间:2015-08-06 09:40:07

标签: c# c#-4.0 elasticsearch json.net nest-api

我知道这是一个愚蠢的问题,任何人都可以帮我解决这个问题吗?

要求在C#下输出,使用“www.newtonsoft.com”json generator dll。

使用JsonConvert.SerializeObject的必需输出:

{
  "must": [
    {
      "match": {
        "pname": "TEXT_MATCH"
      }
     },

     {
        "_bool": {
        "rname": "TEXT_BOOL"
      }
    }
  ]
}

我的C#类设计如下:

public class Rootobject
{
    public Must[] must { get; set; }
}

public class Must
{

    public Match match { get; set; }
    public Bool _bool { get; set; }
}

public class Match
{
    public string pname { get; set; }
}

public class Bool
{
    public string rname { get; set; }
}

我在JsonConvert.SerializeObject之后得到的输出如下:

{
  "must": [
    {
      "match": {
        "pname": "TEXT_MATCH"
      },
      "_bool": {
        "rname": "TEXT_BOOL"
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

在所需的输出中,数组中有2个对象。在你得到的那个中有一个具有Match和Bool属性的对象。以下创建对象和序列化的方法应该提供您正在寻找的内容:

static void Main(string[] args)
{
    Rootobject root = new Rootobject();
    root.must = new Must[2];
    root.must[0] = new Must() { match = new Match() { pname = "TEXT_MATCH" } };
    root.must[1] = new Must() { _bool = new Bool() { rname = "TEXT_BOOL" } };
    string result = Newtonsoft.Json.JsonConvert.SerializeObject(root, 
        Newtonsoft.Json.Formatting.Indented, 
        new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
    Console.WriteLine(result);
}

输出:

{
  "must": [
    {
      "match": {
        "pname": "TEXT_MATCH"
      }
    },
    {
      "_bool": {
        "rname": "TEXT_BOOL"
      }
    }
  ]
}