C# 使用不同类型反序列化JSON以进行序列化/反序列化
我有一门课:C# 使用不同类型反序列化JSON以进行序列化/反序列化,c#,json,datacontractjsonserializer,C#,Json,Datacontractjsonserializer,我有一门课: [DataContract] public class A { [DataMember] public B ArbitraryProperty { get; set;} } 序列化时,“ArbitraryProperty”需要采用类“B”的形式: 以下是JSON输出: { "ArbitraryProperty": { "ValueA": "I'm a value.", "ValueB": "I'm a value too!" } } 但是,当我从服务器返
[DataContract]
public class A
{
[DataMember]
public B ArbitraryProperty { get; set;}
}
序列化时,“ArbitraryProperty”需要采用类“B”的形式:
以下是JSON输出:
{
"ArbitraryProperty": { "ValueA": "I'm a value.", "ValueB": "I'm a value too!" }
}
但是,当我从服务器返回同一个对象时,该属性返回为一个简单字符串,如下所示:
{
"ArbitraryProperty": "I'm not a B, muahahaha!!!"
}
要让DataContractJsonSerializer知道应该将值反序列化为字符串而不是“B”,必须有一个技巧
是否有特殊的方式来设置“a”类/
有什么建议吗?我认为这不是正确的方法-我认为可读性和可用性的正确答案是正确地键入请求和响应类。但是…我唯一能想到的是将属性设置为
对象,而不是强键入它。您只需要确保在为其赋值时,指定了正确的类型
public class A
{
public object ArbitraryProperty { get; set; }
}
它仍将正确序列化:
var a = new A { ArbitraryProperty = new B { ValueA = "a", ValueB = "b" } };
var json = JsonConvert.SerializeObject(a);
Console.WriteLine(json);
当对象返回时,反序列化将把该字符串放入属性中
json = "{'ArbitraryProperty':'This is some string'}";
a = JsonConvert.DeserializeObject<A>(json);
json=“{'ArbitraryProperty':'This is some string'}”;
a=JsonConvert.DeserializeObject(json);
这段代码可以从JSON.NET进行简单的序列化/反序列化,但我不知道您使用的WebAPI或任何技术是否会喜欢它。我觉得您有两个类,一个类具有B
属性,另一个类具有字符串
属性。您的输出和返回的内容是两个完全不相关的数据结构。@JoeEnos因此出现了问题:)我真的不想为我的请求和响应类型创建不同的类……我想它看起来会像这样。我想我会接受你的建议,做正确的事情,只是创建不同的类型。谢谢
json = "{'ArbitraryProperty':'This is some string'}";
a = JsonConvert.DeserializeObject<A>(json);