从数据模型中将自定义数据插入JSON序列化

时间:2014-12-16 10:09:23

标签: c# json json.net

我有数据模型类,我将序列化为JSON,以便能够将序列化的JSON发布到Web服务。数据模型如下所示:

using Newtonsoft.Json;
namespace WebCrawler.Models {
    [JsonObject(MemberSerialization.OptIn)]
    public class LinkDataViewModel
    {
        [JsonProperty]
        public string Title { get; set; }
        .....
        [JsonProperty]
        public string CustomerID { get; set; }
    }
}

我应该如何将数据模型类更改为序列化JSON,如下所示:

{"PostPropertyRequest": {SerializedDataModel}}

3 个答案:

答案 0 :(得分:1)

[JsonObject(MemberSerialization.OptIn)]
public class MyModel
{
   [JsonProperty]
    public LinkDataViewModel PostPropertyRequest{ get; set; }
}

创建上面的模型并序列化。

   MyModel model = new MyModel();
   model.PostPropertyRequest = your model.

现在序列化模型。

答案 1 :(得分:1)

你可以用这种方式编写自定义json(使你的类派生自JsonConverter并覆盖3种方法)

using Newtonsoft.Json;
namespace WebCrawler.Models {
    [JsonObject(MemberSerialization.OptIn)]
    public class LinkDataViewModel : JsonConverter
    {
        [JsonProperty]
        public string Title { get; set; }
        .....
        [JsonProperty]
        public string CustomerID { get; set; }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,            JsonSerializer serializer)
        {
           throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
           if (value == null)
           {
             serializer.Serialize(writer, null);
             return;
            }      
            var properties = value.GetType().GetProperties();
            writer.WriteStartObject();
            //your custom property
            writer.WritePropertyName("PostPropertyRequest");
            writer.WriteStartObject();
            foreach (var property in properties)
            {
              // write property name
              writer.WritePropertyName(property.Name);
              serializer.Serialize(writer, property.GetValue(value, null));
            }
            writer.WriteEndObject();
            writer.WriteEndObject();
        }
    }
}

请参阅此article以获取文档

答案 2 :(得分:1)

对于Json来说,了解不同的XML并不具备根元素非常重要,您当前生成的Json是:

{
    "Title": "Value",
    "CustomerID": "Value"
}

您需要的是:

{
"PostPropertyRequest":
                  {
                    "Title": "Value",
                    "CustomerID": "Value"
                  }
}

您需要简单地包装当前类,应用Json属性并序列化:

[JsonObject(MemberSerialization.OptIn)]
public class LinkDataViewModelWrapper
{
   [JsonProperty("PostPropertyRequest")]
    public LinkDataViewModel LinkDataViewObj{ get; set; }
}

现在,您需要在初始化各种元素和属性后序列化LinkDataViewModelWrapper