gpt4 book ai didi

c# - 使用 WCF 将部分 JSON 对象序列化和反序列化为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:22 24 4
gpt4 key购买 nike

我有一个 WCF REST 服务,它有一个包含多个类型化字段的资源,然后是一个可以是对象数组的字段。我希望我们服务上的字段将这个字段序列化,就好像它是一个字符串一样。示例:

[DataContract]
public class User
{
[DataMember]
public long ID;

[DataMember]
public string Logon;

[DataMember]
public string Features;
}

当我们 API 的用户发布一个新的 User 对象时,我希望他们能够使用这样的东西作为正文:

{
"ID" : 123434,
"Logon" : "MyLogon",
"Features" : [
{ "type": "bigFeature", "size": 234, "display":true },
{ "type": "smFeature", "windowCount": 234, "enableTallness": true}
]
}

代替

{
"ID" : 123434,
"Logon" : "MyLogon",
"Features" : "[
{ \"type\": \"bigFeature\", \"size\": 234, \"display\":true },
{ \"type\": \"smFeature\", \"windowCount\": 234, \"enableTallness\": true}
]"
}

在服务方面,我将在数据库中将“Features”数组保存为 JSON 文本博客,当我在 GET 调用上返回对象时,我希望它能够正确往返。

最佳答案

如果您愿意切换到 Json.NET,您可以将 Features 字符串序列化为私有(private) JToken代理属性:

[DataContract]
public class User
{
[DataMember]
public long ID;

[DataMember]
public string Logon;

string _features = null;

[IgnoreDataMember]
public string Features
{
get
{
return _features;
}
set
{
if (value == null)
_features = null;
else
{
JToken.Parse(value); // Throws an exception on invalid JSON.
_features = value;
}
}
}

[DataMember(Name="Features")]
JToken FeaturesJson
{
get
{
if (Features == null)
return null;
return JToken.Parse(Features);
}
set
{
if (value == null)
Features = null;
else
Features = value.ToString(Formatting.Indented); // Or Formatting.None, if you prefer.
}
}
}

请注意,为了在不转义的情况下序列化 Features 字符串,它必须是有效的 JSON,否则您的外部 JSON 将被破坏。我在二传手中强制执行此操作。你可以使用 JArray如果您愿意,可以使用 JToken 来强制执行字符串表示 JSON 数组的要求。

请注意,字符串格式在序列化期间不会保留。

关于c# - 使用 WCF 将部分 JSON 对象序列化和反序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30653563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com