C#json自定义序列化

时间:2018-04-30 06:59:31

标签: c# json

我在c#中创建了一个自定义标签对象,我需要从这个对象中创建json对象。 但我从标签'中得到了标签。控制自定义标签对象。 序列化自定义标签对象后,json将填充标签属性。 但是,我不需要它。我只需要传递自定义标签对象。

这是自定义标签:

public class customLabel:Label
{

        public string X { get; set; }

        public string Y { get; set; }

        public string H { get; set; }

        public string W { get; set; }

        public string FontName { get; set; }

        public string FontSize { get; set; }

        public string Type { get; set; }

        public string Align { get; set; }

        public string _Text { get; set; }


}

我正在使用 Newtonsoft.Json 作为json serializng

3 个答案:

答案 0 :(得分:2)

创建一个包含所需属性的custom JsonConvertor

然后将其传递给SerializeObject以控制序列化。

string result = JsonConvert.SerializeObject(
                     customLabel,
                     Formatting.Indented,
                     new CustomLabelConverter(typeof(CustomLabel)));

答案 1 :(得分:1)

看看这个Ignore Base Class Properties in Json.NET Serialization

[JsonObject(MemberSerialization.OptIn)]
public class customLabel:Label
{
    [JsonProperty("X")]
    public string X { get; set; }

    [JsonProperty("Y")]
    public string Y { get; set; }

    ...
    public string H { get; set; }

    public string W { get; set; }

    public string FontName { get; set; }

    public string FontSize { get; set; }

    public string Type { get; set; }

    public string Align { get; set; }

    public string _Text { get; set; }

}

但是您需要将JsonProperty放到序列化所需的所有属性

答案 2 :(得分:0)

尝试这样的事情:

customLabel yourLabel = new customLabel();

yourLabel.X = 50;
yourLabel.Y = 20;
//....

string output = JsonConvert.SerializeObject(yourLabel);
//output contains the serialized object

customLabel deserializedLabel = JsonConvert.DeserializeObject<customLabel>(output);

编辑: 将您的班级更改为:

[DataContract]
public class customLabel:Label
{
     [DataMember]
     public string X { get; set; }
     [DataMember]    
     public string Y { get; set; }
     [DataMember]
     public string H { get; set; }
     [DataMember]    
     public string W { get; set; }
     [DataMember]
     public string FontName { get; set; }
     [DataMember]   
     public string FontSize { get; set; }
     [DataMember]  
     public string Type { get; set;
     [DataMember]
     public string Align { get; set; }
     [DataMember]
     public string _Text { get; set; }
}

现在只应包含属性[DataMember]的属性

并查看文档:{​​{3}}