我有一个“复杂”(相当简单,但仍然包含我不想序列化的成员)类,该类定义了从字符串到字符串的隐式转换。 (它可以从一个字符串中重建所有数据)。
此类用于JSON反序列化的更复杂类的成员。
在没有其他配置的情况下,当从浏览器发送JSON时,JSON可以使用此转换来构造此类型。 我需要的是一种简单的方法来告诉JSON忽略该类的所有成员,而只是将类序列化为字符串。
我研究了现有的答案,但是它们都需要大量工作来创建自定义序列化程序。我希望找到一种解决方案,其中所有必需的配置都可以使用一个类上的属性来完成。 我是一个很大的项目的一部分,并且更改整个应用程序的配置和行为是不可行的。
现在产生的是:
"SomeOtherMemberOfClass: "Some value",
"MemberOfMyType": {
"UnimportantMember1": true,
"UnimportantMember2": 123456789,
"TheImportantString": "I want to see this"
}
我希望它产生:
"SomeOtherMemberOfClass: "Some value",
"MemberOfMyType": "I want to see this"
就像我说的那样,如果浏览器以我想要的格式发送数据,我的类反序列化就可以了,但是它仍然以复杂类型发送成员,这是不希望的。
谢谢
答案 0 :(得分:0)
假设您正在使用Json.NET,我认为custom JsonConverter的轻量化程度将与您将要获得的一样轻。您的要求不仅仅是忽略某些成员,而是将复杂对象序列化为字符串,然后将字符串反序列化为复杂对象。
答案 1 :(得分:0)
您的课程如下:
public class MemberOfMyType
{
public bool UnimportantMember1 { get; set; }
public int UnimportantMember2 { get; set; }
public string TheImportantString { get; set; }
}
public class GoodClass
{
public MemberOfMyType MemberOfMyType { get; set; }
public string SomeOtherMemberOfClass { get; set; }
}
然后您可以使用JsonConverterAtrribute来实现所需的功能。
像下面这样JsonConverterAtrribute
来装饰您的班级。
[JsonConverter(typeof(GoodCassConverter))]
public class GoodClass
{
public MemberOfMyType MemberOfMyType { get; set; }
public string SomeOtherMemberOfClass { get; set; }
}
public class GoodClassConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
MyGoodClass myclass = value as MyGoodClass;
writer.WriteValue(myclass..); //do your thing here.
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
MyGoodClass myclass = new MyGoodClass();
myclass.SomeOtherMemberOfClass = (string)reader.Value; //do some stuffs with the string here.
return myclass;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(MyGoodClass);
}
}