Json.NET使用根名称序列化对象

use*_*092 57 .net c# asp.net json json.net

在我的网络应用程序中,我正在使用Newtonsoft.Json,我有以下对象

[Newtonsoft.Json.JsonObject(Title = "MyCar")]
public class Car
{
    [Newtonsoft.Json.JsonProperty(PropertyName = "name")]
    public string Name{get;set;}

    [Newtonsoft.Json.JsonProperty(PropertyName = "owner")]
    public string Owner{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我想用根名称(类名)序列化它们.这是期望的格式使用

{'MyCar':
 {
   'name': 'Ford',
   'owner': 'John Smith'
 }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以用匿名对象做到这一点,但是在Newtonsoft.Json库中有任何属性或其他方式吗?

And*_*rei 35

使用匿名类

使用匿名类以您希望的方式塑造模型:

var root = new 
{ 
    car = new 
    { 
        name = "Ford", 
        owner = "Henry"
    }
};

string json = JsonConvert.SerializeObject(root);
Run Code Online (Sandbox Code Playgroud)


Mat*_*ull 32

我发现了一种简单的方法来渲染它...只需声明一个动态对象并将动态对象中的第一个项目指定为您的集合类...此示例假设您使用的是Newtonsoft.Json

private class YourModelClass
{
    public string firstName { get; set; }
    public string lastName { get; set; }
}

var collection = new List<YourModelClass>();

var collectionWrapper = new {

    myRoot = collection

};

var output = JsonConvert.SerializeObject(collectionWrapper);
Run Code Online (Sandbox Code Playgroud)

你最终应该得到的是这样的:

{"myRoot":[{"firstName":"John", "lastName": "Citizen"}, {...}]}
Run Code Online (Sandbox Code Playgroud)


I4V*_*I4V 9

您可以轻松创建自己的序列化程序

var car = new Car() { Name = "Ford", Owner = "John Smith" };
string json = Serialize(car);
Run Code Online (Sandbox Code Playgroud)
string Serialize<T>(T o)
{
    var attr = o.GetType().GetCustomAttribute(typeof(JsonObjectAttribute)) as JsonObjectAttribute;

    var jv = JValue.FromObject(o);

    return new JObject(new JProperty(attr.Title, jv)).ToString();
}
Run Code Online (Sandbox Code Playgroud)


小智 6

对不起,我的英语不是很好。但我喜欢改进赞成的答案。我认为使用 Dictionary 更简单和干净。

class Program
    {
        static void Main(string[] args)
        {
            agencia ag1 = new agencia()
            {
                name = "Iquique",
                data = new object[] { new object[] {"Lucas", 20 }, new object[] {"Fernando", 15 } }
            };
            agencia ag2 = new agencia()
            {
                name = "Valparaiso",
                data = new object[] { new object[] { "Rems", 20 }, new object[] { "Perex", 15 } }
            };
            agencia agn = new agencia()
            {
                name = "Santiago",
                data = new object[] { new object[] { "Jhon", 20 }, new object[] { "Karma", 15 } }
            };


            Dictionary<string, agencia> dic = new Dictionary<string, agencia>
            {
                { "Iquique", ag1 },
                { "Valparaiso", ag2 },
                { "Santiago", agn }
            };

            string da = Newtonsoft.Json.JsonConvert.SerializeObject(dic);

            Console.WriteLine(da);
            Console.ReadLine();
        }


    }

    public class agencia
    {
        public string name { get; set; }
        public object[] data { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

此代码生成以下 json(这是所需的格式)

{  
   "Iquique":{  
      "name":"Iquique",
      "data":[  
         [  
            "Lucas",
            20
         ],
         [  
            "Fernando",
            15
         ]
      ]
   },
   "Valparaiso":{  
      "name":"Valparaiso",
      "data":[  
         [  
            "Rems",
            20
         ],
         [  
            "Perex",
            15
         ]
      ]
   },
   "Santiago":{  
      "name":"Santiago",
      "data":[  
         [  
            "Jhon",
            20
         ],
         [  
            "Karma",
            15
         ]
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)