我需要根据用户输入将属性类型设置为字符串或Class TypeClass,以便将其序列化为json。
所以我想得到这个
{"query":"type":"Gold Ring","sort":{"price":"asc"}}
或此json
{"query":"type":{"option":"Gold Ring","cat":"Jewelery"},"sort":{"price":"asc"}}
但是我真的不知道该怎么实现。
[JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)]
public string Type { get; set; }
[JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)]
public TypeClass TypeMap { get; set; }
类型类别:
public partial class TypeClass
{
[JsonProperty("option", NullValueHandling = NullValueHandling.Ignore)]
public string Option { get; set; }
[JsonProperty("cat", NullValueHandling = NullValueHandling.Ignore)]
public string Cat { get; set; }
}
预先感谢
答案 0 :(得分:0)
您最好的选择(我还没有测试过这个,所以很有可能在这里我错了)将是测试解析器检索到的值,并对其进行处理。例如,您可以这样做
JObject json = (JObject)JToken.Parse({JSON FILE NAME});
然后执行以下操作:
if(json["query"]["type"].Type == JTokenType.String)
{
//Do stuff if if you just type a string as a straight up single string
}
else
{
//Do stuff you would do if it were a TypeClass value inside of the json
}
您还可以做的只是按照以下方式做些事情:
var json = (JObject)JToken.Parse({JSON FILE NAME});
if(json["query"]["type"].Value().GetType() == typeof(string))
{
string json = json["query"]["type"];
//Do string stuff
}
else if (json["query"]["type"].GetType == typeof(TypeClass))
{
TypeClass json = new TypeClass() {
Option = json["query"]["type"]["option"],
Cat = json["query"]["type"]["cat"],};
//Do TypeClass stuff
}
或者甚至带有模板的东西:
//Method declaration
static bool IsTypeClass<T>(T value)
{
Type ParamType = typeof(T);
if(T.GetType() == "TypeClass")
{
//Is a TypeClass object
return true;
}
//Is not a TypeClass Object
return false;
}
然后在需要比较的地方使用它,如果类型是字符串还是TypeClass。
我希望这会有所帮助!
答案 1 :(得分:0)
将您的JSON示例放入此网站http://json2csharp.com/
{"query":{"type":"Gold Ring"},"sort":{"price":"asc"}}
public class Query
{
public string type { get; set; }
}
public class Sort
{
public string price { get; set; }
}
public class RootObject
{
public Query query { get; set; }
public Sort sort { get; set; }
}