簡體   English   中英

使用Json.net和C#進行序列化時將JSON屬性轉換為數字

[英]Converting JSON properties to numbers when serializing using Json.net and C#

我想在JSON中輸出以下示例數據:

{“ source_id”:“ 1234”,“聯系人”:[“ 15”:“ 020 8111 1111”]}

我嘗試使用以下代碼使用Json.net實現此目的:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Test.Utility
{
    public class RequestHelper
    {
        internal static string CreateData(string sourceId, string telephone)
        {
            JArray createContact = new ContactFieldHelper
            {
                Phone = new JValue(telephone)
            };

            var createData = new DataFieldHelper
            {
                SourceId = sourceId,
                CreateContact = createContact
            };

            string output = JsonConvert.SerializeObject(createData);
            return output;
        }

    }

    class DataFieldHelper
    {
        [JsonProperty(PropertyName = "source_id")]
        public string SourceId { get; set; }

        [JsonProperty(PropertyName = "contacts")]
        public JArray CreateContact { get; set; }
    }

    public class ContactFieldHelper : JArray
    {
        [JsonProperty(PropertyName = "15")]
        public JValue Phone { get; set; }
    }
}

但是,這將顯示“聯系人”字段的空白輸出。 如果僅使用值,而JArray中有鍵值對,則不使用它。 因此,例如,將輸出以下內容:

{“ source_id”:“ 1234”,“聯系人”:[“ 020 8111 1111”]}

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Test.Utility
{
    public class RequestHelper
    {
        internal static string CreateData(string sourceId, string telephone)
        {
            JArray createContact = new JArray
                                    {
                                        new JValue(telephone)
                                    };

            var createData = new DataFieldHelper
            {
                SourceId = sourceId,
                CreateContact = createContact
            };

            string output = JsonConvert.SerializeObject(createData);
            return output;
        }

    }

    class DataFieldHelper
    {
        [JsonProperty(PropertyName = "source_id")]
        public string SourceId { get; set; }

        [JsonProperty(PropertyName = "contacts")]
        public JArray CreateContact { get; set; }
    }
}

有任何想法嗎?

實現我的個人建議的簡單方法是:

創建您的json字符串(注意每個參數,數組,名稱等)(在此處查看json示例,並在此處查看以驗證json(因為它是wwrite無效)) json驗證程序

轉到http://json2csharp.com/並使用此工具將json轉換為簡單類

將新類導入項目中,然后使用System.Web.Script.Serialization.Javascriptserializer類在幾行中進行序列化和反序列化

它將更加簡單和快捷。

以您的代碼為例:

{"source_id":"1234","contacts":["15":"020 8111 1111"]}(invalid json it gives error on validation )

類派生:

 public class Contact
{
   public string __invalid_name__15 { get; set; }
}

public class RootObject
{
  public string source_id { get; set; }
  public List<Contact> contacts { get; set; }
}

如果您希望可以使用serializable屬性裝飾您的屬性或整個類,則只需使用javascriptserializar,如此處

protected void SerializeItem(string s){

System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();

RootObject rt = js.Deserialize<RootObject>(s);//deserialization from string to object
 string S = js.Serialize(RootObject);//serialization from object to complex json string

}

為了更干凈,我更改了您的json代碼和此處派生的類

public class Contact
{
public string id { get; set; }
public string phone { get; set; }
 }

 public class RootObject
{
public string sourceid { get; set; }
public List<Contact> contacts { get; set; }
}

再來看看json例如:

    {"sourceid": "1234",
        "contacts": [
                      {
                        "id": "15",
                        "phone":"020 8111 1111"
                       }
                     ]
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM